javascript - 重新选择重用选择器意外行为

标签 javascript react-redux reselect

上下文是一个带有 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/

相关文章:

javascript - 如果 React 组件的 props 更新但值没有改变,它会重新渲染吗?

javascript - 将 props 传递给选择器以根据该 props 进行过滤

javascript - 从 Javascript 中解析获取用户

javascript - Eternicode Bootstrap 日期选择器 : how do you pass options when you are using show event?

javascript - 在 Redux 中映射对象数组数据

javascript - React Virtualized Select css 问题

javascript - 重新选择选择器功能未执行

javascript - Unslider:即使在 "low"屏幕分辨率下也能居中图像

reactjs - 如何使用 react 在父事件上调用子方法?

redux - 如何在 react 管理框架中重置过滤器值?