Reactjs React useEffect在后续渲染后运行,尽管Redux依赖项未更改
我有一个具有昂贵副作用的React功能组件: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,它就会运行,这也很好 但是,即
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带来的麻烦往往大于收益。