You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 01:15:53