我有一个更新全局计数器的动作和减速器。此操作以快速间隔触发。减速器为每个动作返回一个新的状态副本。减速器看起来像:
import { handleActions } from 'redux-actions';
import { sceneTick } from './actions';
export default (state, action) => handleActions({
[sceneTick]: (state, action) => {
return {
...state,
loop: action.payload,
}
},
我在各种 React 组件上使用react-redux
'sconnect
方法。并非所有组件都关心这个循环计数器。因为我在每次滴答时都在减速器中返回一个新状态,所以所有订阅的组件connect
都会mapDispatchToProps
被执行,这会导致不必要的 React 渲染调用。
这些组件之一看起来像:
const mapStateToProps = (state, props) => {
return {
viewport: state.viewport,
assets: state.assets,
};
};
export default connect(mapStateToProps, {})(Component)
即使这个组件不依赖state.loop
它,它也会被触发重新渲染。这会导致不需要重新渲染的组件中的重新渲染、过度渲染、多次渲染、不必要的渲染、性能问题和意外行为。
更新
我还应该补充一点,我没有combineReducers
在这里使用并且所有减速器都应用于完整状态。不确定是否相关。