[英]Update Formik's state from a button onClick
我有一个 Formik 表单,当我单击一个按钮时,我想更新表单的 state。
function updateForm(){
//Update a product in the form's state
}
<Button onClick={updateForm}>Update Product</>
<Formik
initialValues={{ products: {} }}
>
{({values}) = (
)}
</Formik>
我尝试更新initialValues
但这将重置表单 state 中的任何当前更改。
我可以将 Form 的 state 复制到本地setState
并将其循环回initialValues
,但这感觉有点过头了,因为 Formik 已经这样做了。
我认为useFormik
可能会工作,但文档没有扩展这可能如何工作......?
鉴于@aditaya81070 的有用评论,我最终找到了这个解决方案......
我还必须稍微重构一下我的解决方案,因为我在页面上有两个 Forms 并且为了使用setFieldValue
我必须将两个Form
嵌套在<Formik>
元素中,这样它们就可以轻松通信(它们仍然可以拥有自己的state 单独)。 但是不要将它们嵌套在自己内部,因为这是不允许的。 所以这很好:
<Formik>
<Form />
<Form />
</Formik>
但这不是……
<Formik>
<Form>
<Form />
</Form>
</Formik>
然后我只需将setFieldValue
传递到按钮的回调中......简单:)
function updateForm(setFieldValue){
//Update a product in the form's state
setFieldValue('product.price'), 1.50);
}
<Formik
initialValues={{ products: {} }}
>
{({values, setFieldValue, validateForm}) = (
<button onClick={() =>
//This is the import bit, to get the context.
updateForm(setFieldValue)
}>
Update Product
<button/>
)}
</Formik>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.