Formik复选框切换时日期选择器未动态切换问题求助
问题原因
你现在用外部的activity对象判断日期选择器的显示逻辑,但Formik内部的表单状态更新不会同步到外部的activity上,所以切换复选框时,判断条件没变化,日期选择器自然不会更新。
解决方法
从Formik的render props里获取内部的values状态,用values.allDayEvent作为判断依据,这样复选框切换触发Formik内部状态更新时,组件会重新渲染,日期选择器就能正常切换了。
修改后的代码如下:
<Formik enableReinitialize validationSchema={validationSchema} initialValues={activity} onSubmit={values => handleFormSubmit(values)}> {({ handleSubmit, isValid, isSubmitting, dirty, values }) => ( // 解构出Formik内部的values <Form className='ui form' onSubmit={handleSubmit} autoComplete='off'> <MyCheckBox name='allDayEvent' label='All Day Event' /> {!values.allDayEvent && // 改用values.allDayEvent做判断 <MyDateInput timeIntervals={15} placeholderText='Start Date / Time' name='start' showTimeSelect timeCaption='time' dateFormat='MMMM d, yyyy h:mm aa' title='*Start' /> } {values.allDayEvent && // 改用values.allDayEvent做判断 <MyDateInput placeholderText='Start Date' name='start' dateFormat='MMMM d, yyyy' title='*Start' /> } <Button disabled ={isSubmitting || !isValid || !dirty} loading={isSubmitting} floated='right' positive type='submit' content='Submit'/> <Button as={Link} to='/activities' floated='right' type='button' content='Cancel' /> </Form> )} </Formik>
另外要确保MyCheckBox是基于Formik的字段规范封装的(比如用Field组件或useField hook),能正常更新Formik内部的values.allDayEvent状态,否则切换复选框时Formik状态不会变化,问题依然存在。
内容的提问来源于stack exchange,提问作者Bryan Dellinger
相关产品推荐
相关产品推荐

