首页 > 解决方案 > 只有当它们的依赖项是状态的一部分时,memoized 回调才会改变?

问题描述

我得到了一个 React memoized 回调,它使用来自 redux 存储的值:

const filterValue = useSelector(state => state.filterValue);
const filter = useCallback(
item =>
  includes(item.name.toLowerCase(), filterValue.toLowerCase()) ||
  includes(item.description.toLowerCase(), filterValue.toLowerCase()),
[filterValue]);

我的问题是,memoized 回调是否实际上仅在filterValue更改时才会重新呈现,或者我是否必须将 filterValue 设置为组件状态而不是从 redux 存储(意思是const [filterValue, setFilterValue] = useState('');)才能检测到依赖关系的变化?

标签: reactjsreact-reduxmemoization

解决方案


filterValue是的,只有在更改时才会重新渲染。

如果您想知道为什么,您可以查看useSelector实现高峰并查看useReduxContextContext API 调用。

这意味着filterValue被选择的状态useSelector是组件状态的一部分,就像您使用时一样,因此它是 的依赖数组的useState合法值。useEffect


推荐阅读