gpt4 book ai didi

javascript - Redux useSelector 过滤对象?

转载 作者:行者123 更新时间:2023-12-02 02:19:34 24 4
gpt4 key购买 nike

所以我使用 redux 和 useSelector 钩子(Hook)从商店获取数据。

我可以在一个 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?

最佳答案

您应该能够通过使用 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

关于javascript - Redux useSelector 过滤对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66626001/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com