【发布时间】:2019-09-13 17:50:01
【问题描述】:
对于这个“平面”对象验证
const fields = [
{label: 'Name', name: 'name', validation: yup.string().required()},
{label: 'City', name: 'city', validation: yup.string().required()},
{label: 'Phone', name: 'phone'},
]
我创建了createYupSchema 函数来从fields 获取Yup 模式对象。
const createYupSchema = (fields ) => {
const schema = fields.reduce((schema, field) => {
return field.validation
? {...schema, [field.name]: field.validation}
: schema
}, {})
return yup.object().shape(schema)
}
输出是 Yup 对象:
yup.object().shape({
name: yup.string().required(),
city: yup.string().required(),
})
但我也可以在 fields 中使用嵌套对象
const fields = [
{label: 'Name', name: 'name', validation: yup.string().required()},
{label: 'Address', name: 'address.city', validation: yup.string().required()},
{label: 'Phone', name: 'phone'},
]
所以 Yup 对象应该是:
yup.object().shape({
name: yup.string().required(),
address: yup.object().shape({
city: yup.string().required()
}),
})
是否可以从fields 创建这种类型的 Yup 对象?
【问题讨论】:
标签: javascript formik yup