reactjs - Formik 的 resetForm 方法没有按预期工作
问题描述
我Formik
在我的应用程序中使用,我想取消对表单所做的更改并将其恢复为初始值(这与提交后清除表单无关,这是大多数教程和问题所涉及的)。
这是一个简单的用例:
用户加载一个表单(比如 2 个字段“电子邮件”和“地址”,以及初始值:电子邮件:“foo@gmail.com”,地址:“bar”
用户开始编辑电子邮件字段。但随后他决定取消所做的更改并恢复为初始值(意思是“foo@gmail”、“bar”)。
const MyForm = () => (
<Formik initialValues={{ email:"foo@gmail.com", address: "bar" })>
...
</Formik>
)
我使用resetForm
. 但它不会将我的表单恢复为其初始值
const ResetButtom = () => {
const { resetForm } = useFormikContext();
return (
<Button onClick={() => resetForm()} {...} />
Reset
</Button>
)
}
如何使用 Formik 实现此功能?
解决方案
我会通过将原始初始值保留为可重用变量来解决此问题
const initialValues= { email: 'foo@email.com' }
<Formik initialValues={initialValues} ... />
接着:
<Button onClick={() => resetForm(initialValues)} {...} />
Reset
</Button>
如果您使用 Formik v2:
<Button onClick={() => resetForm({ values: initialValues })} {...} />
Reset
</Button>
或者,您可以setValues
以类似的方式使用:
<Button onClick={() => setValues({ ...initialValues })} {...} />
Reset
</Button>
推荐阅读
- javascript - reactJS 和动态渲染与地图功能我的数据重复
- js-of-ocaml - 使用带有 js_of_ocaml 的 textarea 的值
- r - ggplot2:在 y 轴上以 %H%M%S 格式绘制秒数
- javascript - 角 | 将 JavaScript 库导入组件
- c++ - 如何在 CSR 矩阵的对角块中计算每行的非零值
- scala - 为什么添加 println 会使我的代码无法编译
- executable - 如何在 Python 3.7 中制作单个跨平台 EXE 文件
- php - 如何完成这个 PHP curl 请求以使用 Python 从 API 获取响应?
- python - PySpark sql每天比较记录并报告差异
- swift - Xcode 9 跳转到定义不再起作用