web-dev-qa-db-ja.com

複数の値の検証検証

Formikでyupを使用してフォームを検証したいと思います。 4つのフィールドA、B、C、Dがあり、それらはすべて文字列であるとします。少なくとも1つのフィールドを空にしたくない場合、検証スキーマをどのように記述する必要がありますか?それは有効なフォームですか?前もって感謝します!

2
bunny

Yupを使用すると、すべての通常の機能が失敗する場合は、.test機能、ここに記載- https://github.com/jquense/yup#mixedtestname-string-message-string--function-test-function-schema

mixed.test(name:string、message:string | function、test:function):Schema

検証チェーンにテスト関数を追加します。テストは、オブジェクトがキャストされた後に実行されます。多くのタイプにはいくつかのテストが組み込まれていますが、カスタムテストを簡単に作成できます。非同期のカスタム検証を可能にするために、すべての(またはまったくない)テストは非同期で実行されます。この結果、テストの実行順序は保証されません。

実装では、4つのフィールドのそれぞれに「テスト」を記述して、4つのフィールドの1つがnullでないことを確認します。

field1: yup
    .string()
    .test(
      'oneOfRequired',
      'One of Field1, Field2, Field3 or Field4 must be entered',
      function(item) {
        return (this.parent.filed1 || this.parent.field2 || this.parent.field3 || this.parent.field4)
      }
    ),
field2: yup
    .string()
    .test(
      'oneOfRequired',
      'One of Field1, Field2, Field3 or Field4 must be entered',
      function(item) {
        return (this.parent.filed1 || this.parent.field2 || this.parent.field3 || this.parent.field4)
      }
    ),

等...

この場合、矢印機能は使用していません。これは、「this」コンテキストを使用するには、この構文を使用する必要があるためです。これは、Yupのドキュメントに記載されています。

6
Jamie Shepherd