【问题标题】:React Hook Form Controller IssuesReact Hook 表单控制器问题
【发布时间】:2020-04-28 20:13:51
【问题描述】:

我一直在使用带有原生元素的 react 钩子表单库,但想使用 Controller API 切换到自定义组件。

我的自定义输入组件更新 React 状态但没有更新表单状态中的 ref 时遇到问题。因此,必填字段始终被标记为无效,我无法提交表单。

这是我的问题的演示:https://codesandbox.io/s/react-hook-form-controller-bofv5

它应该在提交时注销表单数据 - 但提交永远不会发生,因为表单无效。

【问题讨论】:

  • 您可能需要进一步澄清react hook from library 的含义(我猜您的意思是useState [和其他默认挂钩] 以及您对custom components using the controller API 的含义(我猜现在你在谈论框架react-hook-form)
  • 是的,我写了“react hook 表单库”,猜猜你读的是“form as 'from'。 :)
  • 哦,真的,我的错,对不起。

标签: javascript reactjs react-hooks react-hook-form


【解决方案1】:

我想我已经缩小了您的问题范围。首先,我从控制器中删除了rules={{ required: true }} 并尝试了表单。它告诉我firstName: undefined。然后我注释掉了onChange 属性。之后,表格工作正常。如果您想提供自定义值提取器,似乎应该使用onChange。该值需要从函数返回。一个简单输入的示例如下:onChange={([{target}]) => target.value}reference。此外,需要注意的是,handleSubmit 会提取一些带有值的内部状态,就像您不需要自己跟踪这些状态一样。

这个更新的组件似乎正在工作:

function App() {
  const { control, handleSubmit, errors } = useForm();
  // const [data, setData] = useState({ firstName: "" });

  const onSubmit = data => console.log(data);

  // const onChangeHandler = e => {
  //   const { name, value } = e.target;
  //   const _data = { ...data };
  //   _data[name] = value;
  //   setData(_data);
  // };

  return (
    <>
      {/* <p>{JSON.stringify(data)}</p> */}
      <form onSubmit={handleSubmit(onSubmit)}>
        <Controller
          as={Input}
          name="firstName"
          id="firstName"
          label="First Name"
          control={control}
          // value={data.firstName}
          rules={{ required: true }}
          errors={errors.firstName}
          // onChange={([e]) => onChangeHandler(e)}
        />

        <input type="submit" />
      </form>
    </>
  );
}

顺便说一句,我从来没有使用过这个库,所以只要你能折腾我就相信我。

【讨论】:

  • 哦,好吧,所以从 onChange 返回的任何内容都将用于设置该表单字段值 - 因为之前我的 onChangeHandler 只是更新我的 React 状态而没有返回来解释一切!非常感谢!!
猜你喜欢
  • 2021-07-10
  • 1970-01-01
  • 2023-04-09
  • 2021-12-09
  • 1970-01-01
  • 2022-01-15
  • 2021-03-29
  • 2021-10-25
  • 2010-12-09
相关资源
最近更新 更多