私はredux-formを使用しており、コンポーネントには複数のFieldArray
があります。 FieldArrayコンポーネントの1つが、スクリーンショットに示すようなテーブルを生成します。ここでは、各行はチェックボックスを含むField
コンポーネントです。私が達成したいのは、その行のcheckbox
コンポーネントがチェックされている場合は、price
フィールドだけが必要です。reduxの別のフィールドに基づいて1つのフィールドを検証します。
Iはdocsに記載されているようvalidate.js
を使用してこの問題を解決しようとしたが、同様に、このコンポーネントは、構造を有するので:次に、私は長さfruitsList
上とならば反復してい私のSecondComponent
で
<FirstComponent>
<FieldArray
component={SecondComponent}
name="options"
fruits={fruitsList}
/>
</FirstComponent>
1より大きい私はThirdComponent
をレンダリングする。このコンポーネントは、スクリーンショットに表示されているフルーツリストを生成します。ある程度のネスティングがあると、値で検証するとパフォーマンスがかなり遅くなり、画面がフリーズしてThirdComponent
がレンダリングされます。各コンポーネントのビットはFields
なので、簡単にマージすることはできません。エレガントな方法でこれを解決する簡単な方法が役立ちます。検証するためのロジックは以下の通りである:
props.fruitsList.map((fruit, index) => {
const isChecked = values.getIn(['fruit', index, 'checked'])
if (isChecked) {
const price = values.getIn(['fruit', index, 'price'])
if (price === undefined || price.length === 0) {
errors.fruits[index] = { price: l('FORM->REQUIRED_FIELD') }
}
}
return errors
})