这可能是Ruby做得更好的东西,但是有更好的方法来编写这个Javascript代码(对于React):
handleCellChange: function(rowIdx, prop, val) {
var updateObj = {};
updateObj.data = {};
updateObj.data[rowIdx] = {};
updateObj.data[rowIdx][prop] = { $set: val };
var newState = React.addons.update(this.state, updateObj);
答案 0 :(得分:7)
在ES6中,您可以使用计算属性名称:
updateObj = { data: { [rowIdx]: { [prop]: {$set: val} } } };
你可以在Traceur或Firefox中夜间使用它等等(但还没有在节点 - 和谐中)。
以下内容将为您解释这种语法:https://www.npmjs.org/package/es6-computed-property-keys。
有关详细信息,请参阅http://wiki.ecmascript.org/doku.php?id=harmony:object_literals#object_literal_computed_property_keys。另请参阅http://kangax.github.io/compat-table/es6/#中的“计算属性”项。
答案 1 :(得分:1)
Javascript的对象文字符号(ES6之前版本)没有提供变量键。但是,您可以稍微减少分配数量:
handleCellChange: function(rowIdx, prop, val) {
var updateObj = { data: {} };
(updateObj.data[rowIdx] = {})[prop] = { $set: val };
您可能会或可能不会考虑任何改进 - 更简洁,但可能不太可读。我会全心全意地建议您将嵌套的data
对象添加到updateObj
的初始赋值(应该使用var
,btw声明),如上所述。但是,使用data[rowIdx]
的初始化结果作为一个值然后在同一行上编制索引的值更值得怀疑。