【问题标题】:How to reset a certains fields after submit in Formik在Formik中提交后如何重置某些字段
【发布时间】:2020-01-08 23:02:42
【问题描述】:

我正在使用 Formik,我需要做这个逻辑。 我的表单很大,提交后我需要重置此表单中的某些字段

有2个按钮:保存和保存&新建

  1. save 将保存数据并重定向。
  2. 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,如果可行,将发布答案

标签: reactjs formik


【解决方案1】:

在提交表单时,您可以使用setFieldValue 和后来的setSubmittingfalse 设置您不想保留的任何值,这样您想要的值将被保留,您可以再次提交表单

请找到示例代码框here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 2021-07-12
    • 1970-01-01
    • 2020-12-11
    • 2019-09-25
    • 1970-01-01
    相关资源
    最近更新 更多