上下文是一个带有 reselect 和 redux 的 React 应用程序,但是我的问题可能只是“纯”JS。我的问题是我不明白为什么我不能重用选择器。
我有一个选择器X
。另外,我还有一个makeGetX,如下:
const X = createSelector( [...], (// checks for a specific flag and manipulates)=> x );
const makeGetX = () => X;
我的一些组件仅使用 X,而另一些组件则使用制造商。 在此之前,我曾经只有具有 X 定义的maker:
const makeGetX = () => createSelector( [...], (// checks for a specific flag and manipulates)=> x );
只要使用上述特定功能,前者就非常有效。 每当我使用生成器时,如第一个代码片段所示重构它就会破坏(无限更新)它。
使用的上下文是我有多个使用 makeMapStateToProps
的组件,并且在其中
...
const getX = makeGetX()
...
return (state,ownProps) => ({..., X: getX(state, ownProps), ...});
在我的连接函数中,我调用makeMapStateToProps
。
现在我通过在两个定义中复制代码:(来解决这个问题。
希望得到任何见解或解释。 谢谢!
最佳答案
好吧,我猜您在内部多次调用createSelector
。
因此它会返回不同的函数对象,其中有一个专用的 memo
存储。
这就是 shallow
检查失败的原因(connect
正在底层进行简单的shallow-equal
检查)。
关于javascript - 重新选择重用选择器意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57990662/