最近,我遇到了useMemo钩子的一些奇怪用法:
const memo = useMemo(callback, false);
作为第二个参数,而不是依赖项传递为false。
这是有效的代码吗? React文档指出依赖关系应该是一个数组。使用false的目的是什么?
答案 0 :(得分:7)
这是有效的代码吗?
这取决于您所说的valid
。
对React API的有效调用吗? 否。
虽然此代码今天可以使用,但在文档中未提及通过false
作为依赖项列表,并且在以后的任何React版本中行为都可以更改。
摘要:将代码更新为useMemo(callback, [])
。
答案 1 :(得分:2)
android:textColor="@color/text_selector"
的{{1}}是一个依赖项列表,它告诉second argument
每当其中一个依赖项发生更改时何时再次记忆useMemo
(重新计算)。仅仅传递React
或不是value
的任何其他值都会抛出false
,这导致React无法静态验证依赖项列表中传递的依赖项。您的代码将正确执行,但与
literal array
那只是
eslint-warning
因此,没有useMemo(() => cb())
没有cb()
依赖项的使用是没有目的的(因为一个修改过的值根本不会记住每个渲染器)
答案 2 :(得分:0)
实际上,我已经分析了react-reconsiler,事实证明上面的代码与此等效:
const memo = useMemo(callback, []);
那是因为javascript的怪癖,其中:
false.length = undefined;
false[1] = undefined;
因此,
undefined === undefined // true