考虑这个JSON结构,它由服务器AJAX请求返回:
{
"Items": [
{
"ID": 1,
"Name": "John Smith"
},
{
"ID": 2,
"Name": "Jane Doe"
}
]}
一个Fetch函数,用于将JSON数据设置为视图组件的状态:
FetchData(json => {
this.setState({
Items: json.Items,
})
})
在组件树的下方有一个带有复选框的React组件,其render()方法如下所示:
render(){
return (
<input type="checkbox" checked={this.props.Item.IsSelected} onClick={this.handleToggleItemEvent.bind(this)} />
<span>{this.props.Item.Name}</span>
);
}
主视图组件有一个handleToggleItemEvent,负责设置项目的 IsSelected 状态:
handleToggleItemEvent(ID){
var item = _.find(this.state.Items, item => {
return item.ID === ID;
});
if(item){
item.IsSelected = !item.IsSelected;
this.setState({
items: this.state.Items
});
}
}
如果单击第一个项目的复选框,则对象将如下所示:
{
"Items": [
{
"ID": 1,
"Name": "John Smith",
"IsSelected": true
},
{
"ID": 2,
"Name": "Jane Doe"
}
]}
由于 IsSelected 状态是应用程序的内部状态而不是从服务器返回,因此当我再次获取数据时(例如通过过滤数据), IsSelected 属性会消失。将这些数据合并在一起的最佳方法是什么(或者这完全是一个坏主意)?我见过Immutability Helpers,但我不知道如何使用它们来合并数组中每个元素的属性。