【问题标题】:Does memoized callbacks change only if their dependencies are part of the state?只有当它们的依赖项是状态的一部分时,memoized 回调才会改变?
【发布时间】:2020-04-26 11:23:00
【问题描述】:

我得到了一个 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('');)以更改依赖项被检测到?

【问题讨论】:

  • 每当filterValue 发生变化时都会重新渲染。 filterValue 不一定非要来useState

标签: reactjs react-redux memoization


【解决方案1】:

是的,仅当filterValue 更改时才会重新渲染。

如果您想知道为什么,您可以查看useSelector implementation 并查看useReduxContext 被上下文 API 调用。

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

【讨论】:

    猜你喜欢
    • 2013-06-18
    • 1970-01-01
    • 2011-05-25
    • 2021-07-17
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多