首页 > 解决方案 > 密码确认和密码相等,但验证仍然触发 React 组件中的 JOI

问题描述

我创建了一个注册表单,并且在尝试验证密码确认时出现了问题。我正在使用最新版本的 JOI-Browser。

我尝试了下面的代码,即使密码和密码确认具有相同的值,也触发了验证错误。

password: Joi.string()
      .min(5)
      .required(),
passwordConfirmation: Joi.ref("password")

这是我的状态对象:

password: "12345"
passwordConfirmation: "12345"
username: ""
errors: {…}
passwordConfirmation: "\"passwordConfirmation\" must be one of [ref:password]"

我花了几个小时尝试了几种方法并阅读了文档,但仍然没有运气,验证仍在触发,

我在这种形式中有其他验证,它们工作正常。

标签: javascriptreactjsvalidationfrontendreact-component

解决方案


我认为不Joi.ref应该那样使用。

我通常倾向于这样做:

const passwordConfirmation = Joi.string()
  .required()
  .valid(Joi.ref('password'))
  .options({
    language: {
      any: {
        allowOnly: '!!Passwords do not match',
      }
    } 
  })

如果您参考文档,您将看到:

请注意,只能在明确支持的情况下使用引用,例如在 valid() 或 invalid() 规则中。如果需要向上(父)引用,请使用 object.assert()。


推荐阅读