为什么验证失败时不显示错误消息?

Why is the error message not being displayed when the validation fails?

提问人:ebbmango 提问时间:11/13/2023 更新时间:11/13/2023 访问量:18

问:

我正在使用 react-hook-form,在我的一生中似乎无法弄清楚以下实现有什么问题:

form.jsx(格式.jsx)

"use client";

import { useForm } from "react-hook-form";
import * as utils from "../utils/validations.js";

const Form = () => {
  const {
    register,
    handleSubmit,
    formState: { isValid, errors },
  } = useForm({
    defaultValues: {
      compressionLevel: 90,
    },
  });

  return (
    <form
      onSubmit={handleSubmit((data) => {
        console.log(data);
      })}
    >
      <label htmlFor="file">File:</label>
      <input
        {...register("file", {
          required: true,
          validate: utils.validateFile,
        })}
        type="file"
        id="file"
        accept=".png, .gif, .bmp, .tiff, .webp, .jpeg"
      />

      <p>{errors.file?.message}</p>

      <input disabled={!isValid} type="submit" />
    </form>
  );
};

验证.js

export function validateFile(files) {
  const fileFormat = files[0]?.type.slice(6);
  return (
    ["png", "gif", "bmp", "tiff", "webp", "jpeg"].includes(fileFormat) || "error!"
  );

为什么错误对象没有更新,即使验证函数显然被调用并按预期运行?

任何其他建议将不胜感激。我是这个图书馆的新手,确实希望有任何关于实现预期结果的更好方法的建议。

javascript reactjs 表单 前端 react-hook-form

评论


答:

0赞 ebbmango 11/13/2023 #1

我需要做的就是简单地将以下模式添加到useForm中:

    const {
        register,
        handleSubmit,
        watch,
        getValues,
        formState: { isValid, errors },
      } = useForm({
        mode: "onChange",
        defaultValues: {
          compressionLevel: 90,
        },
      });

如果我没记错的话,这样一来,表单就会在更改后立即验证其每个字段,而不是等待提交。