Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/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 如何使用createSelectorCreator()重新选择来记忆(深度比较)重复使用对象? 形势_Reactjs_React Redux_Memoization_Reselect - Fatal编程技术网

Reactjs 如何使用createSelectorCreator()重新选择来记忆(深度比较)重复使用对象? 形势

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

使用react redux,在
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;
  },
);
谢谢你所能给予的一切帮助