【问题标题】:Dynamic key in immutability update helper for array数组不变性更新助手中的动态键
【发布时间】:2015-09-03 03:40:23
【问题描述】:

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'],而我想修改 this.state.items[1]['amount'] 的索引为 1。

【问题讨论】:

    标签: javascript reactjs ecmascript-6


    【解决方案1】:

    您可以使用ES6 computed property names,它与您的index 变量看起来像这样:

    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})
    }
    

    【讨论】:

    • 感谢您的详尽回答。我正在使用react-rails gem,尽管启用了记录中的和谐标志并确保computed property transformation is supported,但我收到了这个错误Uncaught SyntaxError: Unexpected token [,所以我会坚持使用辅助方法,直到他们将它与 Babel 一起发布。跨度>
    • 我对辅助函数示例感到困惑。 this.state.items 是一个数组,您将其更新为 {1: { amount: $set: e.target.value } }。我仍在学习更新插件的工作原理,但在我看来这不应该工作。假设它确实以某种方式起作用,他不能刚刚完成update(this.state.items[index], { amount: {$set: e.target.value }}) 吗? update 是否有一些允许它工作的数组的特殊情况?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多