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

如何基于Yup验证React项目中非用户输入来源的对象?

使用Yup验证非用户输入的派生对象

首先先修正你提供的Yup验证规则里的语法错误(多余的点号),修正后的规则如下:

export const userDetailValidation = Yup.object().shape({
  surname: Yup.string()
         .required("This field is required.")
         .max(50, "Maximum character is 50."),
  firstName: Yup.string()
         .required("This field is required.")
         .max(50, "Maximum character is 50.")
});

针对非用户输入的派生对象(比如你提供的userDetails),可以直接使用Yup的同步或异步验证方法:

方法一:同步验证(validateSync)

适合不需要异步校验逻辑的场景,验证通过会返回原对象,失败则直接抛出错误:

const userDetails = {
  "id":1,
  "surname":"Wood",
  "firstName":"Victor"
};

try {
  // 执行同步验证
  const validatedData = userDetailValidation.validateSync(userDetails);
  console.log("验证通过:", validatedData);
} catch (error) {
  console.error("验证失败:", error.message);
  // 若需获取所有字段的错误信息,可访问error.inner
  // console.error("所有错误:", error.inner);
}

方法二:异步验证(validate)

返回Promise,适合包含异步校验逻辑(比如远程校验唯一性)的场景:

const userDetails = {
  "id":1,
  "surname":"Wood",
  "firstName":"Victor"
};

userDetailValidation.validate(userDetails)
  .then(validatedData => {
    console.log("验证通过:", validatedData);
  })
  .catch(error => {
    console.error("验证失败:", error.message);
    // 查看所有字段错误
    // console.error("所有错误:", error.inner);
  });

补充说明

  • 如果想一次性获取所有字段的错误,可在验证方法中传入{ abortEarly: false }参数,避免遇到第一个错误就停止校验。
  • userDetails中的id字段不在验证规则内,Yup会默认忽略这类未定义的字段,不会影响验证结果。

内容的提问来源于stack exchange,提问作者Cypher

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 20:10:28