我正在使用redux-form,而我的组件有几个FieldArray
。FieldArray组件之一生成表,如屏幕截图所示。在这里,每一行都是一个Field
包含复选框的组件。我要实现的是,如果checkbox
选中了该行上的组件,则仅price
需要字段。
我试图通过使用docs中validate.js
所述的方法来解决此问题,但是由于此组件的结构如下:
<FirstComponent>
<FieldArray
component={SecondComponent}
name="options"
fruits={fruitsList}
/>
</FirstComponent>
在我的SecondComponent
迭代中fruitsList
,如果length大于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
})
同步验证功能以形式提供所有值。因此,假设您的复选框是一个表单值,那么您将拥有所需的所有信息。
function validate(values) {
const errors = {}
errors.fruits = values.fruits.map(fruit => {
const fruitErrors = {}
if (fruit.checked) { // only do fruit validation if it's checked
if (!fruit.price) {
fruitErrors.price = 'Required' // Bad user!!
}
}
return fruitErrors
})
return errors
}
...
MyGroceryForm = reduxForm({
form: 'groceries',
validate
})(MyGroceryForm)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句