您不能将这样的表单值重置为初始值。
您需要做的是使用resetForm()
Formik form ref 中的方法。
您只提供一次初始值,并在需要时重置。
我分叉了你的代码框并修改了代码。
https://codesandbox.io/s/formik-re-render-initialvalues-forked-i84sy
以下是与您需要执行的操作相关的部分代码
import React, { useState, useRef } from "react";
...
const Page = () => {
const formikRef = useRef();
const setValues = () => {
console.log("hh");
setInitialValues({ ...initialValues, age: 75 });
formikRef.current.resetForm();
};
...
return (
<div>
<button onClick={setValues}>API Call</button>
<Formik
ref={(ref) => {
formikRef.current = ref;
}}
initialValues={initialValues}
onSubmit={submit}
validationSchema={validationSchema}
enableReinitialize
>
...
</Formik>
</div>
);
};
编辑
我又添加了一个包含修改初始值的部分。首先你需要设置initialValues
而不是做formikRef.current.resetForm()
。
笔记
如果您将 Formik 升级2.x.x
ref
为更改为innerRef
:
<Formik
innerRef={(ref) => {
formikRef.current = ref;
}}
></Formik>;