我认为setState()
不做递归合并。
您可以使用当前状态的值this.state.selected
构造一个新状态,然后调用setState()
该状态:
var newSelected = _.extend({}, this.state.selected);
newSelected.name = 'Barfoo';
this.setState({ selected: newSelected });
我在这里使用过函数_.extend()
function(来自underscore.js库),selected
通过创建状态的浅表副本来防止对该状态的现有部分进行修改。
另一种解决方案是编写setStateRecursively()
对新状态进行递归合并,然后对其进行调用replaceState()
:
setStateRecursively: function(stateUpdate, callback) {
var newState = mergeStateRecursively(this.state, stateUpdate);
this.replaceState(newState, callback);
}