我有一個輸入值列表,我需要使用從調度函數返回的信息填充... 我無法設置componentWillMount內部的狀態因爲我需要等待reducer將信息返回到狀態。從mapStateToProps()給出的Redux道具設置組件的本地狀態
內componentWillMount方法分派調用來獲取數據
componentWillMount() {
this.props.getData(this.props.params.id);
}
裏面componentWillReceiveProps方法我用的道具設置本地狀態返回數據 我把的setState()代碼此方法中,以確保被在connect()合併了本地道具內的數據後執行。 (任何更好的地方做嗎?)
componentWillReceiveProps(nextProps) {
if (nextProps.data) {
this.setState({
contact: nextProps.data.contact,
number: nextProps.data.number,
date: nextProps.data.date,
payment: nextProps.data.payment,
fields: nextProps.data.fields
});
}
}
然後我呈現給他們的狀態值
renderInputFields() {
if (this.state.fields) {
return this.state.fields.map(function(field, index) {
return (
<div key={'line-' + index}>
<input key={'quantity-' + index}
type="text"
id={index}
name="quantity"
placeholder="Add quantity"
value={field.quantity}
onChange={this.onFieldChange} />
<input key={'description-' + index}
type="text"
id={index}
name="description"
placeholder="Add description"
value={field.description}
onChange={this.onFieldChange} />
<input key={'price-' + index}
type="text"
id={index}
name="price"
placeholder="Add price"
value={field.price}
onChange={this.onFieldChange} />
<a onClick={this.onAddField}>
<i className="fa fa-times" aria-hidden="true"></i>
</a>
</div>
)
}, this);
}
}
const mapStateToProps = (state) => {
return {
data: state.data.selected
}
}
export default connect(mapStateToProps, { getData, updateDate, genData, deleteData })(DataEditor);
現在的問題領域:
這是一個很好的做法,以獲得我需要的結果?