我正在尝试使用yup概念对react-select(单选)实施验证。但我收到此错误:
对象作为React子对象无效(找到:带有键{label,value}的对象)。如果要渲染子级集合,请改用数组。
我想知道如何在验证模式中为yup概念分配对象
<Formik
initialValues={{
department:"",
}}
onSubmit={this.submitForm}
validationSchema={Yup.object().shape({
department: Yup.object().shape({
label: Yup.string().required(),
value: Yup.string().required(),
}),
})}>
{ props => {
const {
values,
touched,
errors,
isSubmitting,
handleChange,
handleBlur,
handleSubmit,
selectedOption
} = props;
return (
<React.Fragment>
<InputLabel shrink htmlFor={'department'}>
Department</InputLabel>
<Select
inputId="department"
options={options}
value={values.department}
onChange={this.onChangeOption}
onBlur={handleBlur}
/>
{errors.department && touched.department && ( {errors.department} )}
Submit </div> </React.Fragment> ); }}
答案 0 :(得分:0)
我想知道如何在验证模式中为yup概念分配对象
您做对了(据我所知):
validationSchema={Yup.object().shape({
department: Yup.object().shape({
label: Yup.string().required(),
value: Yup.string().required(),
})
}
React抱怨的是这一行:
{errors.department && touched.department && ( {errors.department} )}
如果errors
有一个称为department
的键,而如果touched
有一个名为department
的键,则呈现对象errors.department
。 React无法做到这一点。如果要显示错误,建议您在选择的内容之外为其添加专用的组件(例如<p>
标签)。像这样:
{errors.department && touched.department && (<p>{errors.department.label}</p>)}
您可以为value
做类似的事情。
PS:您的代码似乎不完整且格式不正确(例如,浮动<div />
标记)。
答案 1 :(得分:0)
您可以使用nullable()
和required()
完善形状方案。
示例
const requiredOption = Yup.object()
.shape({
value: Yup.string(),
label: Yup.string(),
})
.nullable()
.required('This field is required.');
为什么nullable()
和required()
变成形状!
输入必须为
object
类型,但最终值为:null
。如果 “ null”旨在用作空值,请确保将架构标记为.nullable()