Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 重新选择重复使用的选择器意外行为_Javascript_React Redux_Reselect - Fatal编程技术网

Javascript 重新选择重复使用的选择器意外行为

Javascript 重新选择重复使用的选择器意外行为,javascript,react-redux,reselect,Javascript,React Redux,Reselect,上下文是一个React应用程序,带有重选和重选功能,但是我的问题可能只是“纯”JS。我的问题是我不明白为什么不能重用选择器 我有一个选择器X。此外,我还有一个makeGetX,如下所示: const X = createSelector( [...], (// checks for a specific flag and manipulates)=> x ); const makeGetX = () => X; 我的一些组件只是简单地使用X和一些制造商的产品。 在此之前,我只使用X

上下文是一个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 );
无论何时使用上述特定功能,前者都非常有效。 如第一个代码片段所示重构它会在我使用maker时无限地更新它

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

...
const getX = makeGetX()
...
return (state,ownProps) => ({..., X: getX(state, ownProps), ...});
在我的connect函数中,我调用makemapstatetops

现在,我通过复制代码解决了这个问题:在两个定义中

如有任何见解或解释,将不胜感激。
谢谢

好吧,我猜您在内部多次呼叫createSelector。 因此,它返回不同的函数对象,其中有一个专用的memo存储。
这就是为什么shallow check Failes connect在后台执行简单的shallow equal check。

您是否使用任何不可变的数据结构库?能否共享一些代码沙盒链接?它将澄清您的问题,并有助于获得适当的答案。@IvanBurnaev RE:不可变数据结构库-不,简单的取消采购或创建新的数组/对象。如果你想在沙箱中繁殖,你可能会很棘手,需要一段时间:谢谢!是的,然后在makeMapStateToProps中使用makeGetX的getX中调用itOh,对不起!我错过了createSelector的电话。删除我以前的评论。谢谢,可能是吧。在我核实之后,我可以接受你的回答。非常感谢。