我正在使用react-table,我有一个嵌套的组件。该组件是一个包含3个列表的表单。我在每个列表上使用onChange
回调,每当有更改时,我都会将其写入数据库。当我切换react-table的嵌套组件时,一切正常。如果我将againg切换回嵌套组件,则更改的状态将不会持续,但数据实际上已在数据库上发生更改。我注意到的一件事是,如果我在列表上做了更改后立即重新加载页面,一切正常。
嵌套组件代码:
constructor(props, context) {
super(props, context)
this.state = {
assesmentLocal: this.props.row.row.assessment_type || ''
}
}
componentWillReceiveProps(nextProps) {
if (this.props.row.row.assessment_type !== nextProps.row.row.assessment_type) {
this.setState({
assesmentLocal: nextProps.row.row.assessment_type || '',
});
}
}
onChangeAssessmentTypeLocal (row, e) {
// Save the new record to DB.
this.props.onChangeAssessmentType(e.target.value, row.row.guideline_id);
this.setState({
assesmentLocal:e.target.value
})
}
//render method
<FormControl
id="assessmentType"
onChange={this.onChangeAssessmentTypeLocal.bind(this, this.props.row)}
componentClass="select"
placeholder="select"
defaultValue={this.state.assesmentLocal}
>
<option value="INITIAL">INITIAL</option>
<option value="GENERAL">GENERAL</option>
<option value="SPECIALTY">SPECIALTY</option>
</FormControl>
react-table组件代码:
<ReactTable className={"-striped -highlight"}
SubComponent={(row) => {
return (
<SubTable
row={ row }
)
}}
/>
如果我从GENERAL更改为INITIAL并隐藏嵌套组件并将其切换回来,它将再次显示GENERAL,但在DB中我现在有INITIAL以及我的redux商店
我有什么想法可以解决这个问题吗?
更新
this.props.row.row日志:
答案 0 :(得分:0)
问题应该在于您的FormControl
,它没有value
道具。
<FormControl
id="assessmentType"
onChange={this.onChangeAssessmentTypeLocal.bind(this, this.props.row)}
componentClass="select"
placeholder="select"
defaultValue=""
value={this.state.assesmentLocal}
>
答案 1 :(得分:0)
这可能是因为不确定条件已设置在componentWillReceiveProps
:
componentWillReceiveProps(nextProps) {
if (nextProps.row.row) {
this.setState({
assesmentLocal: nextProps.row.row.assessment_type || '',
});
}
}