在组件之外访问 Formik 的值 | 反应

Mar*_*röm 9 reactjs formik

一些信息

我在我的项目中使用 Formik,我的设置如下所示:

|-MenuModal
|--MenuEdit
|---MenuEditForm
Run Code Online (Sandbox Code Playgroud)

MenuModal的父级在哪里。该组件负责返回 Formik 表单,但我在它的 parent 中调用 submit ,它稍后通过 React 的 refs运行提交函数。乱?是的!MenuEditMenuEditFormMenuEditFormMenuModalMenuEdit

我的问题

现在我想使用的状态和回调函数来获取FormiksvaluesMenuEditFormMenuEdit。但由于我没有使用 Formiks 自己的onSubmit

    <Formik
        initialValues={menu}
        validationSchema={validationSchema}
        onSubmit={values => console.log('values', values)} // 'values' is undefined
        ...
Run Code Online (Sandbox Code Playgroud)

我的values遗嘱是未定义的,我无法让我的提交功能通过。

所以我想知道如何访问我的valuesinMenuEditForm以便我以后可以将它传递给MenuEdit并完成我的提交功能。

谢谢阅读。

Jor*_*els 20

要访问 formik 组件之外的值,您可以使用钩子执行此操作:

      const formRef = useRef();

      return (
        <Formik
          ...
          innerRef={formRef}
        >
        ...
      </Formik>
Run Code Online (Sandbox Code Playgroud)

然后,可以在组件之外的任何地方使用 formRef.current.values 访问值。

  • 知道为什么在文档中找不到 insideRef 属性吗? (2认同)
  • @AbrahamL [可以在这里找到](https://formik.org/docs/api/field#innerref) (2认同)

Dan*_*jay 0

您可以简单地传递一个函数来接收来自子组件的值。

例如:

菜单模式:

const MenuModal = () => {
  const [values, setvalues] = useState();
  return (
    ...
      <MenuEdit values={values} onFormSubmit={(values) => setvalues(values)} />
    ...
  );
}
Run Code Online (Sandbox Code Playgroud)

菜单编辑:

const MenuEdit = ({values, onFormSubmit}) => {
    // do something with values
    return (
      ...
      <MenuEditForm onFormSubmit={onFormSubmit} />
      ...
    )
  ...  
}
Run Code Online (Sandbox Code Playgroud)

菜单编辑表单:

const MenuEditForm = ({onFormSubmit}) => (
  ...
  <Formik
    initialValues={menu}
    validationSchema={validationSchema}
    onSubmit={values => onFormSubmit(values)}
  ...
)
Run Code Online (Sandbox Code Playgroud)