gps*_*ugy 6 memoization reactjs react-redux reselect
使用 React Redux,在mapStateToProps
我的一个容器组件中,为了方便起见,我传递了一个具有 8 个以上键的对象。(我知道向下传递对象是一种反模式,但在我的例子中,传递单个对象而不是许多单独的 props 的便利性非常重要。)
您可以使用reselect
memoize 整个对象来传递mapStateToProps
,仅通过深度比较整个对象来传递它吗?如果是这样,正确的方法是什么?
我已阅读reselect
文档部分“为 defaultMemoize 自定义 equalsCheck”,并阅读了许多尝试使用记忆数组reselect
的帖子。基于这些知识,我尝试执行以下操作,但没有成功:
import _ from 'lodash';
import { createSelector, createSelectorCreator, defaultMemoize } from 'reselect'
const createDeepEqualSelector = createSelectorCreator(
defaultMemoize,
_.isEqual,
);
const getLargeObject = createDeepEqualSelector(
(state) => {
// Get the individual values from state
const {
val1, val2, val3, val4, val5, val6, val7, val8, val9, val10
} = state;
// Create a convenient object that contains all of those values to pass down to props
const constructedObject = {
val1, val2, val3, val4, val5, val6, val7, val8, val9, val10
};
return constructedObject;
},
constructedObject => constructedObject,
);
const mapStateToProps = (state, ownProps) => {
const objProp = getLargeObject(state);
return {
objProp,
// ... other props
};
}
Run Code Online (Sandbox Code Playgroud)
如果我不这样做,我最终会得到 8 个以上的单独选择器,并进行大量createSelector
调用。这似乎比必要的多余,让我想知道是否有更好的方法来做到这一点。作为演示:
const getVal1 = (state) => state.val1;
const getVal2 = (state) => state.val2;
...
const getLargeObject = createSelector(
[
getVal1,
getVal2,
...
],
(
val1,
val2,
...
) => {
const largeObject = {
val1,
val2,
...
};
return largeObject;
},
);
Run Code Online (Sandbox Code Playgroud)
感谢您提供的任何帮助!
归档时间: |
|
查看次数: |
1814 次 |
最近记录: |