数组的不变性更新助手中的动态键

时间:2015-06-17 18:23:54

标签: javascript reactjs ecmascript-6

https://facebook.github.io/react/docs/update.html

我有一个更新函数,它接收索引以及事件,以便更改数组中该特定项的值。

如何评估index而不是在此方案中将其视为集合键?它甚至可能吗?

updateValue: function(index, e) {
  var items = React.addons.update(this.state.items, {
   index: {
     amount: {$set: e.target.value}
   }
  });
  this.setState({
    items: items
  })
}

现在这显然不起作用,因为当我想修改this.state.items['index']['amount']索引为1时,它正在尝试更新未设置的this.state.items[1]['amount']

1 个答案:

答案 0 :(得分:41)

您可以使用ES6 computed property namesindex变量看起来像这样:

updateValue(index, e) {
  var items = React.addons.update(this.state.items, {
    [index]: {
      amount: {$set: e.target.value}
    }
  })
  this.setState({items})
}

根据这个ES6 compatability table,React的JSX转换器在启用Harmony转换时支持它们,或者你可以使用Babel代替(从react-tools is being deprecated in favour of Babel开始)。

如果失败,您可以使用辅助函数来创建具有给定命名属性的对象:

function makeProp(prop, value) {
  var obj = {}
  obj[prop] = value
  return obj
}

// ...

updateValue: function(index, e) {
  var items = React.addons.update(this.state.items, makeProp(
    index, {
      amount: {$set: e.target.value}
    }
  ))
  this.setState({items: items})
}