[英]React + Formik - how to pass in new values and set form as dirty?
我的 React 应用程序中有一个 Formik 表单,我有一个特定的场景,我似乎找不到解决方法:
我在自定义表单组件之外有一个切换,它基本上“将表单中的所有内容设置为 false”。 我当前的解决方案是当它被切换时,我更新我传递给表单组件的道具,并重新渲染:
在我的表单组件中:
const [initialState, setInitialState] = useState(props.initialState);
useEffect(() => {
setInitialState(props.initialState);
}, [props.initialState]);
...
...
<Formik
enableReinitialize
initialState={initialState}
...
/>
这确实使用新值正确更新了我的表单,但它不会将表单设置为dirty
。 我的表单组件中有基于它是否脏的逻辑,在这种情况下,我希望表单被认为是脏的。 我首先尝试设置要touched
的每个字段或将每个字段包含在initialTouched
中。 然而, dirty
值是通过比较当前值与initialState
来计算的,而不是字段是否被触及,所以我的表单在这里被认为是“原始的”,因为它与我的(新)初始 state 完全相同。
我正在寻找的是:
initialState
以外的东西传递的方法(即以某种方式强制设置来自外部<Formik />
的值),这会导致dirty
被计算为真 onSubmit={(values, { setSubmitting, resetForm }) => {
setSubmitting(true);
setTimeout(async () => {
console.log(values);
// it will set formik.isDirty to false
// it will also keep new values
resetForm({ values });
}, 100);
}}
您是否尝试过使用onReset属性? 这应该允许您从任何您想要的来源传递值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.