You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Hook Form结合YupResolver失效,登录表单校验异常求助

解决方案

1. 统一表单类型定义

你同时自定义了ILoginModel和通过Yup生成的LoginModelType,可能导致类型不匹配引发异常。直接使用Yup推导的类型即可,删除自定义的ILoginModel:

// 移除自定义的ILoginModel
const {
  handleSubmit,
  register,
  formState: { errors },
} = useForm<LoginModelType>({
  resolver: yupResolver(LoginModelSchema),
});

const submit = async (data: LoginModelType) => {
  const response = await mutateAsync(data);
  console.log('api response', response);
};

2. 确保CustomTextField正确透传props

Material-UI的TextField需要接收name、onChange、onBlur等props才能和react-hook-form的register正常协作。如果你的CustomTextField是自定义封装组件,必须确保它把所有传入的props透传给底层TextField:

// 正确的CustomTextField封装示例
const CustomTextField = (props) => {
  return <TextField {...props} />;
};

如果封装时手动控制了value或onChange,会覆盖register提供的事件绑定,必须改为透传所有props:

// 错误示例(会破坏register的绑定逻辑)
const CustomTextField = ({ value, onChange, ...props }) => {
  return <TextField value={value} onChange={onChange} {...props} />;
};

3. 完善Yup校验规则

给password的required方法添加提示信息,保持规则一致性:

export const LoginModelSchema = object({
  email: string().email().required('Please enter a valid email'),
  password: string()
    .required('Password is required') // 补充必填提示
    .matches(
      /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*])(?=.{8,})/,
      "Must Contain 8 Characters, One Uppercase, One Lowercase, One Number and One Special Case Character"
    ),
});

4. 调试表单数据收集

在提交函数中添加日志,确认register是否正确收集到表单值:

const submit = async (data: LoginModelType) => {
  console.log('Form data:', data); // 查看是否获取到正确的email和password
  const response = await mutateAsync(data);
  console.log('api response', response);
};

5. 启用实时校验(可选)

如果想在用户输入时就触发校验,而非仅在提交时,可给useForm添加mode配置:

const {
  handleSubmit,
  register,
  formState: { errors },
} = useForm<LoginModelType>({
  resolver: yupResolver(LoginModelSchema),
  mode: 'onChange' // 输入变化时自动触发校验
});

内容的提问来源于stack exchange,提问作者Gonzalo Alberto Parra Viguie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 19:47:27