【发布时间】:2020-01-08 23:02:42
【问题描述】:
我正在使用 Formik,我需要做这个逻辑。 我的表单很大,提交后我需要重置此表单中的某些字段
有2个按钮:保存和保存&新建
- save 将保存数据并重定向。
- Save & New 将保存数据并重置前两个字段。
我尝试使用:
- resetForm 但它会重置所有表单
- setValues 不起作用
- setFieldValues 阻止 api 请求
- 手动设置值也不起作用
这里是代码
const initialValues = { value1: "", value2: "", value3: "", value4: "" };
<Formik
initialValues={initialValues}
enableReinitialize
validationSchema={Schema}
validateOnChange={false}
validateOnBlur={false}
onSubmit={(values, { setSubmitting, resetForm }) => {
props.addData(values); // api request
setSubmitting(false);
// resetForm(initialValues); // this will reset all the form fields
// values.value1 = ""; // does not work
}}
>
{({ values, handleChange, handleSubmit, setFieldValue, errors }) => (
<Form>
<Row>
<Field type="text" name="value1" />
<Field type="text" name="value2" />
<Field type="text" name="value3" />
<Field type="text" name="value4" />
</Row>
<StyledRow>
<Button
variant="outline-primary"
onClick={() => {
handleSubmit();
history.push("/tableOverview");
}}
>
Save
</Button>
<Button
variant="outline-primary"
onClick={() => {
handleSubmit();
// this prevents the api request, because of async code I guess
// setFieldValue("value1", "");
// setFieldValue("value2", "");
}
>
Save & New
</Button>
</StyledRow>
</Form>
)}
</Formik>
【问题讨论】:
-
也许你可以休息表格并为你需要值的所有字段设置初始值,或者使用
setFieldsValue并将setSubmitting设置为false,可能会启用你的按钮跨度> -
感谢您的评论,但是如何在
initialValues中访问values? -
可能是这个 heps,codesandbox.io/s/formik-example-pf40m,如果可行,将发布答案