2017-06-13 76 views
0

我正在使用重新选择库。 我有很多组件连接(在他们的stateProps)到某个选择器(用重新选择实现,让我们把它称为选择器A)。每当选择器A的参数(也是选择器称为B,C,D)发生更改时,选择器A将重新计算并分别为每个连接的组件调用。由于这个计算是密集的,这使我在性能上花费了很多。有没有办法避免这种情况并为所有人计算一次? 谢谢使用相同选择器的多个组件,重新选择

+0

你可能会看到咖喱。这将允许您在其他参数未更改时保持某种级别的缓存,并且仅在相关参数更改时才需要计算(请参阅https://medium.com/@kbrainwave/currying-in-javascript-ce6da2d324fe)我使用的是 – sfletche

回答

0

重新选择库implements memoization for the selectors。只有当选择器的输入值改变时,才会重新计算使用createSelector函数创建的选择器。否则,选择器将返回其先前的memoized值 - 跨越组件。从reselect documentation

如果输入选择器的值与先前对选择器的调用相同,它将返回先前计算的值,而不是调用转换函数。

这要求您在各个组件之间重复使用相同的选择器函数。通常,您会创建选择器以及缩减器(例如,在reducer.js中),这些选择器将构建您正在选择的状态。您还应该组合选择器以获得额外的智能,这样也可以记忆跨不同选择器共享的子状态。

+0

跨越多个组件的选择器。 另外值得一提的是我有多层次的选择器,一个在另一个之上。 所以我猜一些输入选择器正在改变。可能是因为输入选择器是“createSelector”选择器本身导致最深的选择器每次都获得与输入选择器不同的功能? –

相关问题