首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Yup验证访问parent.parent

Yup验证访问parent.parent
EN

Stack Overflow用户
提问于 2019-05-14 16:12:02
回答 2查看 7K关注 0票数 4

我正在使用yup模块来验证我的表单。我想访问parent来测试这个值。

我的方案:

代码语言:javascript
复制
enabled: yup.boolean(),
contactDetail: yup.object().shape({
  phoneNumber1: yup.string().nullable(),
  phoneNumber2: yup.string().nullable(),
  email: yup.string().test('email', 'test', async function() {
    // test enabled value
  })
}),

方法when可以在同一级别上访问,但不能在父级上访问。

有谁有主意吗?

EN

回答 2

Stack Overflow用户

发布于 2020-06-02 17:53:57

我也遇到过类似的问题。我成功地使用了这个解决方案。

Idea:将整个表单数据作为上下文传递给模式,并使用

this.options.context

代码语言:javascript
复制
  const schema = yup.object().shape({
        enabled: yup.boolean(),
        contactDetail: yup.object().shape({
          phoneNumber1: yup.string().nullable(),
          phoneNumber2: yup.string().nullable(),
          email: yup.string().test('email', 'test', async function () {
            // this.options.context.enabled

          }),
        }),
      });

传递上下文

不带Formik的

验证时将表单数据作为上下文发送

代码语言:javascript
复制
 schema.validateSync(data, {context: form_data})

带Formik

使用validate而不是validationSchema

在validateYupSchema中将您的表单数据作为第四个参数传递,它表示上下文,稍后可以在模式中访问。

在validateYupSchema.中将您的架构作为第二个参数传递

代码语言:javascript
复制
    <Formik
      validate={(value) => {
        try {
          validateYupSchema(value, schema, true, value);
        } catch (err) {
          return yupToFormErrors(err); //for rendering validation errors
        }

        return {};
      }}

       onSubmit={} />
票数 5
EN

Stack Overflow用户

发布于 2019-09-19 17:52:47

您可以使用https://github.com/jquense/yup#mixedtestname-string-message-string--function-test-function-schema中提供的测试方法。就像下面的例子一样,你可以使用this.parent在test()中访问一个级别的父细节。

代码语言:javascript
复制
amount: Yup.string().test('amount-test3', 'amount is required', function (value) {
                    const { description } = this.parent;
                    return !(!!description && !Number(value));
                  })
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56125797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档