Yup.when: "`NaN`(从值 `NaN` 转换)”

san*_*oco 16 validation reactjs yup

我正在尝试为表单字段/选择实现一个非常基本的验证。验证架构:

vehicleProvider: Yup.object() // This is an object which is null by default
    .required('formvalidation.required.message')
    .nullable(), 
reserveVehicle: Yup.number().when('vehicleProvider', { // This is a number which is null by default
    is: provider => provider?.hasReserve,
    then: Yup.number()
        .required('formvalidation.required.message')
        .nullable(),
    otherwise: Yup.number().notRequired()
}),
Run Code Online (Sandbox Code Playgroud)

我想要做的是:只需要/验证reserveVehicle如果provider.hasReservetrue。否则,不需要号码。我收到此错误:

“reserveVehicle 必须是一种number类型,但最终值是:(NaN从值中转换NaN)。”

这是有道理的(有点)因为,null这不是一个数字。但是当我试图告诉它不应该要求它时,在我看来它不应该尝试评估它。

我是否错过了任何关键概念Yup

Gau*_*rav 28

你应该使用typeError

这是我的代码中的一个示例:

amount: Yup.number()
                    .typeError('Amount must be a number')
                    .required("Please provide plan cost.")
                    .min(0, "Too little")
                    .max(5000, 'Very costly!')
Run Code Online (Sandbox Code Playgroud)

  • 我现在只需设置 typeError(''),因此我的应用程序中不会显示不需要的错误 (2认同)

小智 21

无需使用“typeError”

yup.number()
    .transform((value) => Number.isNaN(value) ? null : value )
    .nullable()
    .required('Required'),
Run Code Online (Sandbox Code Playgroud)


Abd*_*ali 11

使用这段代码 .transform((value) => (isNaN(value) ? 0 : value))

age: yup
.number()
.transform((value) => (isNaN(value) || value === null || value === undefined) ? 0 : value)
.required()
.label("Age"),
Run Code Online (Sandbox Code Playgroud)