Reactjs 如何使用createSelectorCreator()重新选择来记忆(深度比较)重复使用对象? 形势
使用react redux,在Reactjs 如何使用createSelectorCreator()重新选择来记忆(深度比较)重复使用对象? 形势,reactjs,react-redux,memoization,reselect,Reactjs,React Redux,Memoization,Reselect,使用react redux,在mapstatetrops中为我的一个容器组件传递一个带有8个以上键的对象,以方便起见。(我知道向下传递对象是一种反模式,但在我的例子中,传递单个对象而不是许多单个道具的便利性非常重要。) 问题 您是否可以使用重新选择来记忆整个对象,以便通过MapStateTrops向下传递,仅通过深入比较整个对象来传递?如果是,正确的方法是什么? 我的尝试 我已经阅读了reselectdocs部分,“自定义defaultMemoize的equalityCheck”,并且已经阅读了
mapstatetrops
中为我的一个容器组件传递一个带有8个以上键的对象,以方便起见。(我知道向下传递对象是一种反模式,但在我的例子中,传递单个对象而不是许多单个道具的便利性非常重要。)
问题
您是否可以使用重新选择
来记忆整个对象,以便通过MapStateTrops
向下传递,仅通过深入比较整个对象来传递?如果是,正确的方法是什么?
我的尝试
我已经阅读了reselect
docs部分,“自定义defaultMemoize的equalityCheck”,并且已经阅读了许多文章,其中尝试使用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
};
}
(不幸的)选择
如果我不这样做,我最终会有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;
},
);
谢谢你所能给予的一切帮助