Javascript 在对象上重新使用选择器筛选?
所以我使用redux和useSelector钩子从存储中获取数据 我可以过滤reducer数组中的特定数据,以便组件仅在过滤数据更改时更新,例如:Javascript 在对象上重新使用选择器筛选?,javascript,reactjs,redux,react-redux,react-hooks,Javascript,Reactjs,Redux,React Redux,React Hooks,所以我使用redux和useSelector钩子从存储中获取数据 我可以过滤reducer数组中的特定数据,以便组件仅在过滤数据更改时更新,例如: const images = useSelector(state => state.Reducer.images.filter(x => x.id === someID)); 然而,当我尝试对一个对象执行相同的操作时,即使存储区没有更改,组件也总是重新渲染。e、 g: const images = useSelector(state =
const images = useSelector(state => state.Reducer.images.filter(x => x.id === someID));
然而,当我尝试对一个对象执行相同的操作时,即使存储区没有更改,组件也总是重新渲染。e、 g:
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);
不错,谢谢