Javascript React Hooks-0与空数组作为useffect中的第二个参数

Javascript React Hooks-0与空数组作为useffect中的第二个参数,javascript,reactjs,use-effect,Javascript,Reactjs,Use Effect,我看到有人在useEffect中使用0而不是空数组作为第二个参数 所以不是 useEffect(() => { console.log('Run once'); }, []); 是的 useEffect(() => { console.log('Run once'); }, 0); 它似乎也有同样的效果,所以我想知道他为什么用这个 空数组视为0,具体取决于对其求值的方式。例如,[]==0为真,但[]==0为假。因此,在这种情况下,引擎盖下可能没有严格的比较,如果使

我看到有人在useEffect中使用0而不是空数组作为第二个参数

所以不是

useEffect(() => {
    console.log('Run once');
}, []);
是的

useEffect(() => {
    console.log('Run once');
}, 0);
它似乎也有同样的效果,所以我想知道他为什么用这个

空数组视为0,具体取决于对其求值的方式。例如,
[]==0
为真,但
[]==0
为假。因此,在这种情况下,引擎盖下可能没有严格的比较,如果使用0也没关系

只需遵循react文档,我将使用一个空数组

:

如果你想运行一个特效并且只清理一次(在安装和 卸载),可以将空数组([])作为第二个参数传递。这 告诉React您的效果不依赖于道具的任何值 或状态,因此它永远不需要重新运行。这不是一个特殊的问题 案例-它直接从依赖项数组始终 工作

我想知道
0
是否是一个可能比
[]
更简洁的二进制参数,或者使用
0
是一种不好的做法,或者它是否无关紧要,
[]
只是一种首选约定


谢谢。

尽管控制台日志错误说明了一切:

react dom.development.js:88警告:useEffect收到的最后一个参数不是数组(而是收到的
number
)。指定时,最后一个参数必须是数组


我认为使用
[]
将是更好的方法,因为
useffect
的第二个参数的目的。即使您只想确保效果只运行一次,也应该将参数视为依赖项数组。

这是useEffect函数的签名

export function useEffect(
  create: () => (() => void) | void,
  deps: Array<mixed> | void | null,
): void {
  const dispatcher = resolveDispatcher();
  return dispatcher.useEffect(create, deps);
}
导出函数useffect(
创建:()=>(()=>void)| void,
deps:Array | void | null,
):无效{
const dispatcher=resolvedpatcher();
返回dispatcher.useffect(创建,deps);
}

在这里,您可以看到它只接受一个数组,void或null,因此正确的答案是,如果您只想运行一次数组,则始终发送一个数组,该数组传递的依赖项列表不是数组文本。这意味着我们无法静态验证您是否通过了正确的依赖项/dep

尝试运行放置0或null的代码时收到此警告 所以我想如果你想运行一次代码,发送一个数组会更好