React Hooks - 0 vs. 空数组作为 useEffect 中的第二个参数

Ste*_*Bob 10 javascript reactjs use-effect

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

所以代替

useEffect(() => {
    console.log('Run once');
}, []);
Run Code Online (Sandbox Code Playgroud)

它是

useEffect(() => {
    console.log('Run once');
}, 0);
Run Code Online (Sandbox Code Playgroud)

它似乎具有相同的效果,所以我想知道他为什么使用它?

根据您的评估方式,空数组被视为 0。例如[] == 0是真的,但是[] === 0是假的。所以也许在这种情况下,引擎盖下没有严格的比较,如果使用 0 也没有关系。

只是按照反应文档我会使用一个空数组。

反应文档

如果您只想运行效果并仅将其清理一次(在装载和卸载时),您可以传递一个空数组 ([]) 作为第二个参数。这告诉 React 你的 effect 不依赖于来自 props 或 state 的任何值,所以它永远不需要重新运行。这不是作为特殊情况处理的——它直接遵循依赖项数组的工作方式。

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

谢谢。

lui*_*ero 7

这是 useEffect 函数的签名

export function useEffect(
  create: () => (() => void) | void,
  deps: Array<mixed> | void | null,
): void {
  const dispatcher = resolveDispatcher();
  return dispatcher.useEffect(create, deps);
}
Run Code Online (Sandbox Code Playgroud)

在那里你可以看到它只接受一个数组,void或null,所以你的问题的正确答案是如果你只想运行一次就总是发送一个数组