Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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
Reactjs React useEffect在后续渲染后运行,尽管Redux依赖项未更改_Reactjs_Ionic Framework_Redux_React Router_React Hooks - Fatal编程技术网

Reactjs React useEffect在后续渲染后运行,尽管Redux依赖项未更改

Reactjs React useEffect在后续渲染后运行,尽管Redux依赖项未更改,reactjs,ionic-framework,redux,react-router,react-hooks,Reactjs,Ionic Framework,Redux,React Router,React Hooks,我有一个具有昂贵副作用的React功能组件: useEffect(() => { doExpensiveSideEffect(reduxProp); }, [reduxProp]); reduxProp是通过Redux连接器从外部获得服务的属性。对于这个问题,我希望reduxProp的确切来源无关紧要 我的问题是,doExpensiveSideEffect的运行频率超出了需要 它在第一次渲染后运行,这很好 只要重新分配了reduxProp,它就会运行,这也很好 但是,即

我有一个具有昂贵副作用的React功能组件:

  useEffect(() => {
    doExpensiveSideEffect(reduxProp);
  }, [reduxProp]);
reduxProp
是通过Redux连接器从外部获得服务的属性。对于这个问题,我希望
reduxProp
的确切来源无关紧要

我的问题是,
doExpensiveSideEffect
的运行频率超出了需要

  • 它在第一次渲染后运行,这很好
  • 只要重新分配了
    reduxProp
    ,它就会运行,这也很好
  • 但是,即使
    reduxProp
    没有更改,它也会在后续渲染后运行
这就引出了我的问题: 如果且仅当重新分配了
reduxProp
时,我如何确保
doExpensiveSideEffect
运行,而不考虑后续渲染的数量?

编辑: 值得注意的是,该组件被包装到路由器的高阶组件中。路由由路由器组件控制。我假设IonReactRouter生成同一子组件的多个实例,这可能是这个问题的根本原因

有关IonReactRouter的更多信息,请参阅

此外,
reduxProp
通过
react redux
connect
-功能传递。 在这两者之间,使用自定义“选择器”从全局AppState中选择
reduxProp
。 以下代码演示了从全局AppState到上述useEffect的路径:

const OuterComponent = withRouter(
  connect<StateProps, DispatchProps, OwnProps, AppState>(
    (state: AppState, ownProps: OwnProps) => ({
      reduxProp: selectPartOfState(state, ownProps),
    }),
    {}
  )(InnerComponent)
);
const OuterComponent=withRouter(
连接(
(州:AppState,ownProps:ownProps)=>({
reduxProp:选择PartOfState(州、ownProps),
}),
{}
)(内部组件)
);

现在,
InnerComponent
在其道具中接收
reduxProp
,并包含上述useffect。

它看起来像是
reduxProp
在代码中的某个地方被重新分配什么是
reduxProp
,它是如何传递给该组件的?如果它是不同的实际对象或数组实例,它将导致这种效果发生变化。您能否向我们展示将该值传递到您的组件(从何处调用该值,或在连接器中)的代码?现在,我已经用有关
reduxProp
的附加信息更新了该问题。我个人已经停止使用任何路由器组件一段时间了。我发现这些第三方LIB带来的麻烦往往大于收益。