ant-design給我們提供了Form表單組件,但是由于排版,由于功能等原因,我們會需要自定義表單組件;但是原有的表單取值和驗證使用保持不變。
ant-design表單組件我主要使用getFieldDecorator方法。
下面是父組件的表單,引用了一個自定義的表單組件OptionSelect,子組件里面可能數(shù)據(jù)格式或者數(shù)據(jù)個數(shù)不一樣。
<FormItem label="選項">
getFieldDecorator('option', {
initialValue: [defaultValue.option || '0', defaultValue.word]
})(
<OptionSelect/>
)}
</FormItem>
父組件使用getFieldDecorator最后可以取到option選項的值,但是這是一個值,他怎么和子組件的關聯(lián)?
子組件props:
render() {
const {value} = this.props;
return(
<div>
<Select value={value[0]} onChange={this.selectChange}>
//...
</Select>
<Input value={value[1]} onChange={this.inputChange}/>
</div>
)
}
selectChange(val) {
const {onChange} = this.props;
//通知父組件更新
//封裝數(shù)據(jù)傳參
let changeVal;
//...
onChange(changeVal)
}
inputChange(e) {
const {onChange} = this.props;
}
OptionSelect.propTypes = {
value: PropTypes.array,
onChange: PropTypes.func
};
getFieldDecorator這個方法會向組件注入value參數(shù),onChange方法。子組件通過value參數(shù)來初始化值,通過onChange方法通知父組件更新。