0

在我的反应组件中,我有这两个初始值

 const [initialValues, setInitialValues] = useState({
    name: 'Tom',
    age: 85,
  });

我有一个文本字段来更改名称字段的值。我有一个按钮来更改年龄字段。

如果我输入名称为“杰瑞”并按下该按钮更新年龄它将更新年龄为 75 岁并将名称“杰瑞”再次重置为“汤姆”。

这是我的代码

在文本框中输入 Jerry 并点击按钮,看到它变为“Tom”

我该如何解决?

任何帮助!提前致谢!=)

4

1 回答 1

0

您不能将这样的表单值重置为初始值。

您需要做的是使用resetForm()Formik form ref 中的方法。

您只提供一次初始值,并在需要时重置。

我分叉了你的代码框并修改了代码。 https://codesandbox.io/s/formik-re-render-initialvalues-forked-i84sy

以下是与您需要执行的操作相关的部分代码

import React, { useState, useRef } from "react";
...

const Page = () => {
  const formikRef = useRef();

  const setValues = () => {
    console.log("hh");
    setInitialValues({ ...initialValues, age: 75 });
    formikRef.current.resetForm();
  };
  ...
  return (
    <div>
      <button onClick={setValues}>API Call</button>

      <Formik
        ref={(ref) => {
          formikRef.current = ref;
        }}
        initialValues={initialValues}
        onSubmit={submit}
        validationSchema={validationSchema}
        enableReinitialize
      >
        ...
      </Formik>
    </div>
  );
};

编辑 我又添加了一个包含修改初始值的部分。首先你需要设置initialValues而不是做formikRef.current.resetForm()

笔记

如果您将 Formik 升级2.x.x ref为更改为innerRef

<Formik
  innerRef={(ref) => {
    formikRef.current = ref;
  }}
></Formik>;
于 2020-12-28T14:13:03.477 回答