我有这样的组件结构
<A>
<B>
<C/>
<C/>
</B>
<D>
<E/>
<E/>
</D>
</A>
想法是块 E 中组件上的操作由组件 A 的函数处理为 A 的状态,然后作为道具传递给 B 和 C。我知道,更好的方法是使用 Flux、pubsub-js 或其他 Store-message 系统,但希望有人能解释为什么按照我的理解正确的解决方案不起作用。
从组件 E 的多个实例中同时调用组件 A 的此函数会导致竞争条件只有一个状态更改(而不是每个函数调用都提供更改)
updateState(value,index){
this.setState(update(this.state, {
a: {
[index]: {
b: {
$set: value
}
}
}
})
);
}
这里的函数更新来自
import update from 'react/lib/update';
与 ReactJS 推荐的做法背道而驰的糟糕解决方案,但效果很好:
updateState(value,index){
this.state.a[index].b=value;
this.forceUpdate();
);
}
我的问题是:
它是一个错误,多个同时 setState 调用竞争条件,还是我在不理解的情况下做错了什么?