我用的是Formik,Yup和Typescript,我用这个作为表单的初始值...
const initialValues = {
title: "",
overview: "",
related_items_id: [],
short_desc: ""
};
这是我的计划...
const formSchema = Yup.object().shape({
title: Yup.string()
.trim()
.required("This field is required."),
overview: Yup.string().required("This field is required."),
related_items_id: Yup.array()
.min(1, "Pick at least 1 item")
.of(Yup.number().required("This field is required.")),
short_desc: Yup.string().required("This field is required.")
});
现在,我需要related_items_id
数组或short_desc
,如果一个数组填充了数据,另一个数组就不需要了,反之亦然,我如何使用when
之类的东西来完成呢?
下面是我创建的一个codesandbox,它显示了我在尝试使用Yup的when
方法时遇到的错误...
https://codesandbox.io/s/formik-yup-required-one-or-the-other-nextjs-gujqv
4条答案
按热度按时间iyfjxgzm1#
可以通过创建一个在
related_items_id
和short_desc
上相互依赖的类型来实现这一点你可以这样利用它
要有条件地设置formSchema,请 checkout 文档Conditionally Set Required Field(Yup)。
wdebmtf22#
这是您检查是否至少完成了其中一项的方法。
aor9mmx13#
kknvjkwl4#
如果使用
when
不是一个严格的要求,我发现使用test函数会更容易一些,因为它更简洁、更容易理解,并且不需要重复代码或消息