问题:Formik - 确认后如何重置表单

在Formik中,如何使重置按钮仅在确认后**重置表单?

即使您单击取消,我下面的代码仍会重置表单。

var handleReset = (values, formProps) => {
    return window.confirm('Reset?'); // still resets after you Cancel :(
};

return (
  <Formik onReset={handleReset}>
    {(formProps) => { 
      return (
        <Form>
          ...
          <button type='reset'>Reset</button>
        </Form>
      )}}
  </Formik>
);

解答

我不完全确定,但我认为您将不得不编写自己的重置功能,而无需使用reset类型的按钮。像这样的东西:

const handleReset = (resetForm) => {
  if (window.confirm('Reset?')) {
    resetForm();
  }
};

function Example() {
  return (
    <Formik initialValues={{ value: 1 }}>
      {formProps => {
        return (
          <Form>
            <Field name="value" type="number" />
            <button
              onClick={handleReset.bind(null, formProps.resetForm)}
              type="button"
            >
              Reset
            </button>
          </Form>
        );
      }}
    </Formik>
  );
}

如果你真的要使用onReset,我认为唯一的办法就是抛出一个错误。 Formik源代码似乎表明无论您的onReset()函数返回什么,都会调用resetForm()

const handleReset = () => {
  if (!window.confirm('Reset?')) {
    throw new Error('Cancel reset');
  }
};

function Example() {
  return (
    <Formik initialValues={{ value: 1 }} onReset={handleReset}>
      {formProps => {
        return (
          <Form>
            <Field name="value" type="number" />
            <button type="reset">
              Reset
            </button>
          </Form>
        );
      }}
    </Formik>
  );
}

尽管我个人仍然会使用第一个解决方案。

Logo

React社区为您提供最前沿的新闻资讯和知识内容

更多推荐