我使用combineReducers来组合所有reducers来创建存储,是否意味着从任何视图调度的任何操作都会触发所有调用的reducers来检查操作类型?它效率低吗?
或者我不完全理解redux设计原理?
lua*_*ped 21
对,那是正确的.
但是,您必须优化此行为的一个选项(从Redux文档中建议)是使用"重新选择" https://github.com/rackt/reselect
Reselect基本上允许你创建memoized选择器,你可以说道具A依赖于状态B和状态C,因此只有在状态B或状态C改变时才重新计算道具A.
请注意,这仍将触发所有reducers运行(并通过switch语句查看该操作是否适用于它们) - 我相信没有办法绕过这种行为.但是,使用重新选择意味着如果存在影响该状态的实际更改,则顶级组件将仅接收道具/状态更改,而不是每次都触发更改并使React重新呈现所有内容,即使更改无效因为它与某个地方无关.(重新选择的自述文件解释得更好)
是的 - 在您发送操作时,将调用所有减速器.你会得到一个很好的副作用.因为如果未找到操作,每个reducer都会返回默认状态,您可以使用单个操作设置初始状态.
虽然我还没有尝试过,但它可能是有益的,因为单个动作会影响多个减速器,也就是改变商店两个不同部分的状态.
当你添加重新选择它@luanped建议你可以得到很多恶心的结果!
我目前的筹码是:
增加重新选择工作流程并使其与减速器一起工作是上周发生在我身上的最好的事情.