useMemo() 如何为其工厂创建一个 id?
How does useMemo() create an id for its factories?
React 中有一个函数叫做 useMemo()
const eg = React.useMemo(() => true, []);
如果我两次包含同一个函数,它怎么知道要记忆哪个 return?
const eg1 = React.useMemo(() => Math.random(), []);
const eg2 = React.useMemo(() => Math.random(), []);
这两个箭头函数都没有明确的 ID,而且——据我所知——除了可能对它们的内部文本进行散列处理之外,没有办法对它们进行 ID 识别。在这种情况下,他们将拥有相同的 ID。
这里发生了什么时髦的魔法?
根据我对 useMemo 的理解,它只是无法记住并且由于缺少参数而总是重新计算值。
useMemo在函数参数相同的情况下避免计算,如果没有参数,每次渲染都会计算一个新值。
React 知道哪个是哪个,因为它假设您总是以完全相同的顺序调用 useMemo
完全相同的次数。因此,它知道您在渲染期间第一次调用 useMemo
时,它应该检查上次第一次调用的依赖数组,以及 return 第一个值。然后你第二次调用 useMemo
,它检查第二个依赖数组和 returns 第二个值。等等
这就是 rules of hooks 坚持不能有条件地调用挂钩的原因。
React 中有一个函数叫做 useMemo()
const eg = React.useMemo(() => true, []);
如果我两次包含同一个函数,它怎么知道要记忆哪个 return?
const eg1 = React.useMemo(() => Math.random(), []);
const eg2 = React.useMemo(() => Math.random(), []);
这两个箭头函数都没有明确的 ID,而且——据我所知——除了可能对它们的内部文本进行散列处理之外,没有办法对它们进行 ID 识别。在这种情况下,他们将拥有相同的 ID。
这里发生了什么时髦的魔法?
根据我对 useMemo 的理解,它只是无法记住并且由于缺少参数而总是重新计算值。
useMemo在函数参数相同的情况下避免计算,如果没有参数,每次渲染都会计算一个新值。
React 知道哪个是哪个,因为它假设您总是以完全相同的顺序调用 useMemo
完全相同的次数。因此,它知道您在渲染期间第一次调用 useMemo
时,它应该检查上次第一次调用的依赖数组,以及 return 第一个值。然后你第二次调用 useMemo
,它检查第二个依赖数组和 returns 第二个值。等等
这就是 rules of hooks 坚持不能有条件地调用挂钩的原因。