使用 Yup 访问必填字段

Spo*_*y30 6 javascript reactjs yup react-hook-form

我使用react-hook-form 和 yup 来验证我的表单。

我想知道模式的所有必填字段以在表单中显示一些信息(例如必填字段的“*”)。我们可以用这行代码来实现这一点:

schema.describe().fields[field].tests.findIndex(({ name }) => name === 'required'

但是,此代码不适用于条件验证。

架构示例:

const schema = yup.object().shape({
    email: yup
    .string()
    .email()
    .required(),

    isProfileRequired: yup
    .boolean(),

    profile:  yup
    .object()
    .when('isProfileRequired',{
        is: (isProfileRequired) => isProfileRequired,
        then:
            yup
            .object()
            .nullable()
            .required()
    })
})
Run Code Online (Sandbox Code Playgroud)

有没有办法在表单中检索这些信息?

小智 7

实际上没有“好”的方法来做到这一点,但这是有效的:

function isRequired(field){
    return schema.fields[field]._exclusive.required || false 
}
Run Code Online (Sandbox Code Playgroud)

注意:schema.fields[field]._exclusive.required如果需要或未定义,则返回 true。


vin*_*ess 5

测试 ExclusiveTests 而不是 _exclusive 对我有用。

const isRequired = 
validationSchema?.fields[aField.name]?.exclusiveTests?.required || false;
Run Code Online (Sandbox Code Playgroud)