当前位置: 首页 > 知识库问答 >
问题:

还原对象上的useSelector筛选?

谷永贞
2023-03-14

所以我使用redux和useSelector钩子从Store获取数据。

我可以在一个reducer数组中过滤特定的数据,这样组件只在过滤的数据发生变化时才更新,例如:

const images = useSelector(state => state.Reducer.images.filter(x => x.id === someID));

然而,当我尝试对一个对象进行相同的操作时,即使存储区没有改变,组件也总是重新呈现。例如:

const images = useSelector(state => Object.keys(state.Reducer.images)
  .filter(x => x === someID)
  .reduce((arr, key) => {
    arr.push(state.Reducer.images[key].data);
    return arr;
  }, []));

为什么会发生这种情况,以及如何在数据发生变化时才进行更新?我假设将一些深入的比较函数传递给useSelector?

共有1个答案

仰欣悦
2023-03-14

您应该能够通过使用shallowequal来避免这些重新呈现。这将防止新引用一直被认为是不同的。

const images = useSelector(state => Object.keys(state.Reducer.images)
  .filter(x => x === someID)
  .reduce((arr, key) => {
    arr.push(state.Reducer.images[key].data);
    return arr;
  }, []), shallowEqual);

https://react-redux.js.org/api/hooks#equality-comparisons-and-updates

 类似资料:
  • 我的映射如下所示,我正在对名称和其他属性进行bool应该查询,如下所示,但我需要的是,我希望在响应时根据CustomerId过滤CustomerPrices。每个产品都有相同的CustomerID,所以Eaxample; 因此,根据我查询Product1时,响应应该只有CustomerId:1234的customerPrice 我尝试了以下查询,但这不是过滤嵌套对象。我想它过滤产品对象是有意义的,

  • 我正试图找出如何解决这两个问题,我有我的ES 5.6索引。 我需要创建两个单独的脚本过滤器: 1-筛选employee数组大小==3的文档 2-筛选数组第一个元素为“name”==“John”的文档 我试图做一些第一步,但我无法迭代列表。我总是有一个空指针异常错误。

  • 我需要获得的模块,与那些张贴的地方等于“维也纳”,我无法消除那些没有通过验证。 这是JSON。 预期结果 这就是我正在尝试的 实际结果 我无法删除那些不符合条件的帖子。

  • type String - rawData. bytes Buffer - 要上传的数据。

  • 问题内容: 这个问题基本上是不言而喻的。我无法找到用于数组的API(除了此Arrays之外,但这仅定义了一堆用于处理实际数组的静态辅助函数)。如果没有它的类,这似乎表明数组不能是。 然而,事实上,一个阵列具有公共领域,如和方法,它可以调用像和似乎暗示(强烈)相反完整。 对原始数组的奇数表示和行为有何解释? 作为说明,我现在尝试在数组的方法上使用“开放实现” Eclipse功能,希望我能够查看定义此

  • 问题内容: 我正在上最后一堂课。我复制的阵列使用对象,并且当我改变一个中复制的数组对象,它就会被反映原始数组英寸 我正在输出, 我应该在所有情况下都得到25和26的输出,对吗?为什么会改变? 问题答案: System.arrayCopy()复制对象还是对对象的引用? 参考,这是一个 浅表 副本。出乎意料的是,文档没有明确地说,只是隐式地说,因为他们 只 谈论复制数组元素,而不是递归地复制他们引用的