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