微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 React TSX 有条件地验证可见字段

如何解决使用 React TSX 有条件地验证可见字段

我很难理解如何在条件显示的字段上编写验证。我的意思是:我有一个表单,其中 2 个复选框('webmoney'、'bank_transfer')webmoney 显示 3 个输入字段。 bank_transfer 显示另外 2 个复选框 payment_system_A 和 payment_system_B,它们按条件显示与每个复选框相关的字段。

我只是想出了这个解决方案,但它不起作用。我已经被难住了2天了。 :(

const validationSchema = yup.object().shape({
id: yup.number().required(),title: yup.string().required('required field'),is_default: yup.number().oneOf([0,1]),is_confirmed: yup.number().oneOf([1],t('Confirm that the payment details on this form are correct')),method_fields: yup.object().when('id',(id,validationSchema) => {
  switch (paymentMethod[id]) {     <---- here i will get webmoney or bank_transfer
    case 'webmoney: {
      return yup.object().shape({
        webmoney_account_number: yup.string().required('required field'),webmoney_purpose_of_payment: yup.string().required('required field')
      });
    }

    case 'bank_transfer': {

// These fields must be validated if payment_method_a is selected
//
      return yup.object().shape({
        payments_name: yup.string().required('required field'),payments_nickname: yup.string().required('required field'),payments_address: yup.string().required('required field'),payments_bank_account_number: yup.string().required('required field'),payments_bank_routing_number: yup.number().required('required field'),payments_bank_name: yup.string().required('required field'),//
// These fields must be validated if payment_method_b is selected
    

    international_transfers_name: yup.string().required('required field'),international_transfers_address: yup.string().required('required field'),international_transfers_account: yup.string().required('required field'),international_transfers_bank: yup.string().required('required field'),international_transfers_bank_address: yup.string().required('required field'),international_transfers_swifts: yup.string().required('required field'),international_transfers_etc: yup.string().required('required field')
          });
        }
      }
    })
  });

我很乐意为您提供更多信息,但出于安全原因我不能。

解决方法

我解决了这个问题,下面我提供结构。

const validationSchema = yup.object({
field_name: yup.number(),field_name: yup.number(),field_name: yup.string().required('Required field'),checkbox1: yup.number().oneOf([0,1]),checkbox2: yup.number().oneOf([1],t('Some text')),deep_object: yup
  .object()
  .when('condition_field1',{
    is: (value) => your_condition,then: yup.object({
      field_name: yup.string().required('Required field'),field_name: yup.string().required('Required field')
    })
  })
  .when('condition_field1',then: yup.object().when('condition_field2',{
      is: (value) => your_condition,then: yup.object({
        field_name: yup.string().required('Required field'),field_name: yup.string().required('Required field')
      }),otherwise: yup.object().when('condition_field2',{
        is: (value) => your_condition,then: yup.object({
          field_name: yup.string().required('Required field'),field_name: yup.string().required('Required field')
        })
      })
    })
  })

});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?