form
form copied to clipboard
如何用setFields为动态增减的表单项设置错误状态
这是需要动态增减的表单组件, 校验条件是不为空,且页面上的这个组件值不能重复:(其实就是将antd的动态增减表单项的代码拿来修改)
<Form.Item
label='关键词'
required={true}
key={`keyword[${k}]`}
>
{getFieldDecorator(`keyword[${k}]`, {
validateTrigger: ['onChange', 'onBlur'],
rules: [{
validator: (rule, value, callback) => this.validateKeyword(rule, value, callback, k),
}],
initialValue: keywordList[k] && keywordList[k].keyword
})(
<Input placeholder="请输入关键词" style={{ width: '60%', marginRight: 8 }} />
)}{
keys.length > 0 ? (
<span>
<Icon
type="plus-circle-o"
onClick={() => this.add(index)}
className={addStyles.addBtn}
/>
{
keys.length > 1 && index !== 0 && (
<Icon
className={addStyles.delBtn}
type="minus-circle-o"
disabled={keys.length === 1}
onClick={() => this.remove(k)}
/>
)
}
</span>
) : null}
</Form.Item>
这是remove事件:
remove = (k) => {
const { form } = this.props;
// can use data-binding to get
const keys = form.getFieldValue('keys');
// We need at least one passenger
if (keys.length === 1) {
return;
}
const removeValue = form.getFieldValue('keyword')[k]
// can use data-binding to set
form.setFieldsValue({
keys: keys.filter(key => key !== k),
}, () => {
/* 这里的写法会报错 */
// form.setFields({
// `keyword[${k}]`:{
// value: removeValue,
// errors:[],
// }
// })
});
}
假如有操作: 1、add一个值为1的关键字(key假设为0) 2、再add一个值为1的关键字(key假设为1) 3、此时表单会在key为1的组件下提示“重复” 4、remove key 为 0 的组件(期待:key 为 1 的组件下的提示可以被移除)
现在的问题是,需要被移除的组件叫 keywork[${k}],但是 setFields 好像并不支持这种写法
我也遇到这个问题,报错信息 fields.reduce is not a function