我使用的是一个YUP模式,它的Reaction-Hook-Form是useFieldArray,我想测试每个变量的pageRedirectId
与表单的pageId
是不同的.问题是,我似乎无法从测试方法中访问pageId
的值.
我试图从ctx
,this
访问它,但它不在那里-它似乎只能访问每个变量的表单值,而不是整个表单值.
有谁知道解决这个问题的办法吗?以下是我的方案:
export const schema = (user: User) =>
Yup.object().shape({
name: Yup.string().required('Enter a name'),
websiteId: Yup.string().required('Select a website'),
pageId: Yup.string().required('Select a page'),
variants: Yup.array()
.of(
Yup.object()
.shape({
name: Yup.string().required('Enter a variant name'),
pageRedirectId: Yup.string(),
})
.test(
'redirects to the same page',
'You cannot redirect to the same page. Choose a different page to redirect to',
function (value, ctx) {
const { pageRedirectId } = value;
const pageId = '@todo'; // how can I get the pageId?
// @ts-ignore
const path = `variants[${ctx.options.index}].pageRedirectId`;
if (pageRedirectId === pageId) {
return this.createError({
message: 'A variant cannot have the same page redirect as the main page',
path,
});
}
return true;
}
)
)
.min(2, 'At least one variant is required')
.required('Add at least one variant')
});
variants
使用Reaction-Hook-Form的useFieldArray.我似乎也不会使用我在其他帖子中看到的when
方法,尽管我不太熟悉它.
任何帮助都将非常感谢,因为我不确定从这里到哪里go ,除了可能将整个表单的值传递给createTestSchema
函数,比如user
是如何传递的.