使用ReactJS合并数组元素的属性

时间:2015-04-30 17:42:32

标签: javascript json reactjs

考虑这个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,但我不知道如何使用它们来合并数组中每个元素的属性。

0 个答案:

没有答案