【发布时间】:2021-06-14 09:55:22
【问题描述】:
我有一个 Formik 表单,当我点击一个按钮时,我想更新表单的状态。
function updateForm(){
//Update a product in the form's state
}
<Button onClick={updateForm}>Update Product</>
<Formik
initialValues={{ products: {} }}
>
{({values}) = (
)}
</Formik>
我尝试更新initialValues,但这会重置表单状态的任何当前更改。
我可以将表单的状态复制到本地 setState 并将其循环回 initialValues 但这感觉有点矫枉过正,因为 Formik 已经这样做了。
我认为useFormik 可能有效,但文档没有详细说明这可能如何工作...?
【问题讨论】:
-
你是对的。你可以在这里使用
useFormik钩子。您的初始值将传递给useFormik,它会返回一个类似{setValues, values, errors, ...}的对象,然后您可以在updateForm 函数中使用setValues。 -
我可以将
useFormik与FormikForm元素一起使用,而不是像Formik 文档建议的那样使用通用HTML<form>元素吗?感觉文档缺少一些更广泛的示例。 -
啊抱歉,我没有意识到您也在使用 Formik 的表单组件。如果您想继续使用 Form,而不是
useFormik,您可以使用useFormikContext和Formik,它会为您提供与useFormik相同的值。检查文档上的示例:formik.org/docs/api/useFormikContext -
是的,正确。
useFormikContext将仅在Formik内。所以不幸的是,你必须使用useFormik,而在使用useFormik时你不能使用Form and Field。 -
是的,它行不通。您必须在 Formik 中呈现的组件内调用 useFormikContext。如果您检查文档考试,则 AutoSubmitToken 会在 Formik 内呈现,并且它正在使用 useFormikContext