这个例子有些勉强,但忍耐着我。说我有两个函数作为成员的阵营组成:正确处理多个顺序状态更新
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(订单,真)完成,只有最后LINEITEM选择的状态出现在我的组件的状态已经改变。我猜这是因为REACT为配料对setState的电话,所以当我打电话:
var newSelectedLineItems = React.addons(this.state.selectedLineItems, mutation);
在第二功能
,我每次拿起原来的状态,所以只有最后一次突变生效。
我应该收集父函数中的所有状态突变,并且只调用一次setState?这对我来说有点笨拙,我想知道我是否错过了一个更简单的解决方案。
作为React的全新产品,我没有考虑过在这里使用Mixin,但是这绝对让人感觉更清爽。我的一个问题涉及在您的解决方案中调用process.nextTick。我能找到的唯一文档表明这是一个Node特定的库。是否有类似的库可用于在客户端上处理时缓冲更新? – tnorwood 2014-10-03 19:16:38
如果你不使用browserify/webpack,你可以下载一个独立的shim:http://wzrd.in/standalone/process%2fbrowser - 大多数人使用cjs模块,你必须自己编译一些库,因为npm通常是唯一的分销渠道。 – FakeRainBrigand 2014-10-03 23:12:45
我真的很喜欢你对我问题的回答。我将Mike的答案标记为仅仅因为它不需要外部依赖。我认为有一个强有力的案例可以让你的答案从更多的ReactJS思维模式中解决问题。谢谢您的帮助。 – tnorwood 2014-10-06 13:19:55