从 Formik 组件中的上下文调用函数将导致警告
invoke function from context in Formik component will cause warning
<Formik
enableReinitialize
initialValues={testState}
validateOnChange
onSubmit={onSubmit}>
{(formProps) => {
formProps.dirty && !isEmpty(formProps.touched) && handleFormDirty();
return (
<TestComponent />
);
}}
</Formik>
handleFormDirty 是 React 上下文中的一个函数,它将改变 React 上下文中的状态。但是,当我尝试调用 handleFormDirty 时,它会显示如下警告:
要在 Formik
中找到错误的 setState() 调用,请按照描述的堆栈跟踪进行操作
我在这里发现了一个类似的问题,但答案似乎并不完美。
有什么想法吗?非常感谢。
做效果。您不能在渲染的同时更新状态:
const ParentComponent = (props) => {
return (
<Formik
enableReinitialize
initialValues={testState}
validateOnChange
onSubmit={onSubmit}
>
{(formProps) => <MyFormComponent {...formProps} handleDirty={handleFormDirty}/>}
</Formik>
);
}
const MyFormComponent = ({handleDirty,...formProps}) => {
useEffect(() => {
formProps.dirty && !isEmpty(formProps.touched) && handleFormDirty();
},[formProps.touched,formProps.dirty,handleDirty]);
return (
<TestComponent/>
);
}
<Formik
enableReinitialize
initialValues={testState}
validateOnChange
onSubmit={onSubmit}>
{(formProps) => {
formProps.dirty && !isEmpty(formProps.touched) && handleFormDirty();
return (
<TestComponent />
);
}}
</Formik>
handleFormDirty 是 React 上下文中的一个函数,它将改变 React 上下文中的状态。但是,当我尝试调用 handleFormDirty 时,它会显示如下警告:
要在 Formik
中找到错误的 setState() 调用,请按照描述的堆栈跟踪进行操作
我在这里发现了一个类似的问题
有什么想法吗?非常感谢。
做效果。您不能在渲染的同时更新状态:
const ParentComponent = (props) => {
return (
<Formik
enableReinitialize
initialValues={testState}
validateOnChange
onSubmit={onSubmit}
>
{(formProps) => <MyFormComponent {...formProps} handleDirty={handleFormDirty}/>}
</Formik>
);
}
const MyFormComponent = ({handleDirty,...formProps}) => {
useEffect(() => {
formProps.dirty && !isEmpty(formProps.touched) && handleFormDirty();
},[formProps.touched,formProps.dirty,handleDirty]);
return (
<TestComponent/>
);
}