【发布时间】:2014-11-28 19:07:40
【问题描述】:
这个例子有点做作,但请耐心等待。假设我有两个函数作为 React 组件中的成员:
var OrderApp = React.createClass({
getInitialState: function() {
return {
selectedOrders: {},
selectedLineItems: {}
};
},
setOrderSelected: function(order, newSelectedState) {
var mutation = {};
mutation[order.id] = {$set: newSelectedState};
var newSelectedOrders = React.addons(this.state.selectedOrders, mutation);
_.each(order.lineItems, function(lineItem) {
setLineItemSelected(lineItem, newSelectedState);
});
this.setState({selectedOrders: newSelectedOrders});
},
setLineItemSelected: function(lineItem, newSelectedState) {
var mutation = {};
mutation[lineItem.id] = {$set: newSelectedState};
var newSelectedLineItems = React.addons(this.state.selectedLineItems, mutation);
this.setState({seelctedLineItems: newSelectedLineItems});
}
});
在调用 OrderApp.setOrderSelected(order, true) 完成时,我的组件状态中似乎只有最后一个 lineItem 选定状态发生了变化。我猜这是因为 React 正在批量调用 setState,所以当我调用时:
var newSelectedLineItems = React.addons(this.state.selectedLineItems, mutation);
在第二个函数中,我每次都取原始状态,所以只有最后一个突变生效。
我应该收集父函数中的所有状态突变并且只调用一次 setState 吗?这对我来说有点笨拙,我想知道我是否缺少更简单的解决方案。
【问题讨论】:
标签: javascript immutability reactjs