React钩子useMemo,false为依赖项

时间:2019-09-24 19:18:33

标签: javascript reactjs react-hooks

最近,我遇到了useMemo钩子的一些奇怪用法:

const memo = useMemo(callback, false);

作为第二个参数,而不是依赖项传递为false。

这是有效的代码吗? React文档指出依赖关系应该是一个数组。使用false的目的是什么?

3 个答案:

答案 0 :(得分:7)

这是有效的代码吗?

这取决于您所说的valid

  • 在语法上正确:(javascript,打字稿)
  • 工具允许的结果:(附加,流程,打字稿)

对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