重新选择重用的选择器意外行为

Reselect reused selector unexpected behaivor

上下文是一个带有 reselect 和 redux 的 React 应用程序,但是我的问题可能只是 'pure' JS。我的问题是我不明白为什么我不能重用选择器。

我有一个选择器 X。另外,我有一个makeGetX如下:

const X = createSelector( [...], (// checks for a specific flag and manipulates)=> x );
const makeGetX = () => X;

我的一些组件只使用 X 和一些制造商。 在那之前,我曾经只有 X 定义的制造商:

const makeGetX = () => createSelector( [...], (// checks for a specific flag and manipulates)=> x );

前者在使用上述特定功能时效果很好。 每当我使用制造商时,如第一个片段所示重构它(无限更新)它。

使用的上下文是我有多个组件使用 makeMapStateToProps 并且在其中

...
const getX = makeGetX()
...
return (state,ownProps) => ({..., X: getX(state, ownProps), ...});

在我的连接函数中调用 makeMapStateToProps

现在我通过在两个定义中复制代码:(来解决它。

将不胜感激任何见解或解释。 谢谢!

嗯,我猜你在内部多次调用 createSelector
所以它 returns 你不同的函数对象,里面有一个专用的 memo 存储。
这就是 shallow 检查失败的原因(connect 在后台进行简单的 shallow-equal 检查)。