获取未捕获的类型错误:path.split 不是反应中的函数

Pra*_*mar 38 react-hook-form

我正在尝试对我的表单进行验证以做出反应。我选择了“react-hook-form”库。但我不断收到错误“Path.split 不是函数。即使在使用他们网站上给出的默认示例后,我也遇到了同样的错误。这是官方网站中给出的默认代码。

import React from "react";
import { useForm } from "react-hook-form";

export default function App() {
  const { register, handleSubmit, watch, errors } = useForm();
  const onSubmit = data => console.log(data);

  console.log(watch("example")); // watch input value by passing the name of it

  return (
    {/* "handleSubmit" will validate your inputs before invoking "onSubmit" */}
    <form onSubmit={handleSubmit(onSubmit)}>
    {/* register your input into the hook by invoking the "register" function */}
      <input name="example" defaultValue="test" ref={register} />
      
      {/* include validation with required or other standard HTML validation rules */}
      <input name="exampleRequired" ref={register({ required: true })} />
      {/* errors will return when field validation fails  */}
      {errors.exampleRequired && <span>This field is required</span>}
      
      <input type="submit" />
    </form>
  );
}
Run Code Online (Sandbox Code Playgroud)

Ami*_*mit 75

react-hook-form 从 6.XX 更新到 7.0.0 并且有重大变化:

你必须全部替换ref={register}{...register('value_name')}

例子:

版本 6.XX:

<input ref={register({ required: true })} name="test" />
Run Code Online (Sandbox Code Playgroud)

7.0.X 版:

<input {...register('test', { required: true })} />
Run Code Online (Sandbox Code Playgroud)

  • 您可以运行 codemon `npx @hookform/codemod v7/update-register` (6认同)

Cás*_*rda 15

具有必需错误消息功能的简单输入,更新中的必要更改:

从版本 6.xx

function MyComponent(props) {
  const { register, handleSubmit, errors } = useForm();

  const onSubmit = (values) => {...};

  return (
    <div>
      <form onSubmit={handleSubmit(onSubmit)}>
        <input
          name="message"
          autoComplete="off"
          ref={register({
            required: "Required",
          })}
        />
        {errors.message && errors.message.message}
        <input type="submit" />
      </form>
    </div>
  );
}
Run Code Online (Sandbox Code Playgroud)

到版本 7.xx

function MyComponent(props) {
  const { register, handleSubmit, formState: { errors }} = useForm();

  const onSubmit = (values) => {...};

  return (
    <div>
      <form onSubmit={handleSubmit(onSubmit)}>
        <input
          name="message"
          autoComplete="off"
          {...register("message", {
            required: "Required",
          })}
        />
        {errors.message && errors.message.message}
        <input type="submit" />
      </form>
    </div>
  );
}
Run Code Online (Sandbox Code Playgroud)

除了注册修复之外,如果您使用 useForm() 中的错误,现在错误功能将从formState导出。


Eth*_*aan 5

值得一提的是,如果您正在使用material ui或类似的东西, whereref={ref}会引发错误(因为它期望使用不同的道具名称而不是ref),您可能想要

import { TextField } from '@material-ui/core';

const { ref, ...rest } = register('value_name')


return (
 <TextField inputRef={red} {...rest} />
)
Run Code Online (Sandbox Code Playgroud)

有这种迁移指南这里,但还是值得一提