Formik 中具有初始值的复选框未切换,需要处理 Checked/defaultChecked
Checkbox with Initial Value in Formik Not Toggling, Need to Handle Checked/defaultChecked
我在 Formik 中有一个复选框,其初始值是在数据库提取后确定的,它填充 values
。但是,如果我执行以下操作,那么尽管初始值是正确的,但我无法切换复选框,它始终保持选中状态。
<Form.Control type="checkbox"
id="checkCertAgreement"
name="certAgreement"
checked={values.certifyAndReview === 'Y'}
value="Y"
onChange={handleChange}
onBlur={handleBlur}
/>
这意味着我不能使用 checked
但必须使用 defaultChecked
。但问题是,我的 values
是在初始 useEffect
提取中的 Ajax 提取之后出现的。 defaultChecked
仅适用于 第一次渲染 。当第一次渲染发生时,显然 values
尚未加载并且 values.certifyAndReview === 'Y'
为 false。所以现在我的复选框的初始值不再起作用,尽管我现在可以切换。
<Form.Control type="checkbox"
id="checkCertAgreement"
name="certAgreement"
defaultChecked={values.certifyAndReview === 'Y'}
value="Y"
onChange={handleChange}
onBlur={handleBlur}
/>
有什么解决办法吗?
注意:出于某种原因,此问题不会发生在单选按钮上。 在单选按钮上,当我指定 checked={values.field === 'Y'}
时,它会同时设置初始 post-fetch 值和允许我切换。
我的建议是改用Form.Check。
<Form.Check type="checkbox"
id="checkCertAgreement"
name="certAgreement"
checked={values.certifyAndReview === 'Y'}
onChange={handleChange}
onBlur={handleBlur}
/>
我不得不添加一个明确的 checked
如下,
checked={values.field == 'Y' ? true : false}
现在它会选择初始化的选中状态。
我在 Formik 中有一个复选框,其初始值是在数据库提取后确定的,它填充 values
。但是,如果我执行以下操作,那么尽管初始值是正确的,但我无法切换复选框,它始终保持选中状态。
<Form.Control type="checkbox"
id="checkCertAgreement"
name="certAgreement"
checked={values.certifyAndReview === 'Y'}
value="Y"
onChange={handleChange}
onBlur={handleBlur}
/>
这意味着我不能使用 checked
但必须使用 defaultChecked
。但问题是,我的 values
是在初始 useEffect
提取中的 Ajax 提取之后出现的。 defaultChecked
仅适用于 第一次渲染 。当第一次渲染发生时,显然 values
尚未加载并且 values.certifyAndReview === 'Y'
为 false。所以现在我的复选框的初始值不再起作用,尽管我现在可以切换。
<Form.Control type="checkbox"
id="checkCertAgreement"
name="certAgreement"
defaultChecked={values.certifyAndReview === 'Y'}
value="Y"
onChange={handleChange}
onBlur={handleBlur}
/>
有什么解决办法吗?
注意:出于某种原因,此问题不会发生在单选按钮上。 在单选按钮上,当我指定 checked={values.field === 'Y'}
时,它会同时设置初始 post-fetch 值和允许我切换。
我的建议是改用Form.Check。
<Form.Check type="checkbox"
id="checkCertAgreement"
name="certAgreement"
checked={values.certifyAndReview === 'Y'}
onChange={handleChange}
onBlur={handleBlur}
/>
我不得不添加一个明确的 checked
如下,
checked={values.field == 'Y' ? true : false}
现在它会选择初始化的选中状态。