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

标签 javascript reactjs use-effect

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

useEffect(() => {
    console.log('Run once');
}, []);
它是
useEffect(() => {
    console.log('Run once');
}, 0);
它似乎具有相同的效果,所以我想知道他为什么使用它?
空数组被视为 0,具体取决于您如何评估它。例如 [] == 0是真的,但是 [] === 0是假的。所以也许在这种情况下,引擎盖下没有严格的比较,如果你使用 0 也没关系。
只需按照 react 文档,我将使用一个空数组。
React docs :

If you want to run an effect and clean it up only once (on mount and unmount), you can pass an empty array ([]) as a second argument. This tells React that your effect doesn’t depend on any values from props or state, so it never needs to re-run. This isn’t handled as a special case — it follows directly from how the dependencies array always works.


我想知道 0是在 [] 上使用的可能更简洁的二进制参数, 或者如果使用 0是一种不好的做法,或者如果没关系,[]只是一个首选的 React 约定?
谢谢。

最佳答案

这是 useEffect 函数的签名

export function useEffect(
  create: () => (() => void) | void,
  deps: Array<mixed> | void | null,
): void {
  const dispatcher = resolveDispatcher();
  return dispatcher.useEffect(create, deps);
}
在那里你可以看到它只接受一个数组,void 或 null,所以你的问题的正确答案是如果你只想运行一次,总是发送一个数组

关于javascript - React Hooks - 0 vs. 空数组作为 useEffect 中的第二个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62781907/

相关文章:

Javascript 中 if 语句的问题

javascript - AngularJS $(filter) 没有接收 Date() 函数?

javascript - 丑化定义未定义

reactjs - 什么时候应该使用 useEffect 钩子(Hook)而不是事件监听器?

javascript - 为什么 react-native-onboarding-swiper 不能在我的启动画面上工作?

javascript - 如何通过样式属性值选择字体

reactjs - combineReducers 破坏了 Redux 状态,也破坏了多个 ImmutableJs reducer

reactjs - 我们在 ReactElement 上怎么称呼 <P = any>

javascript - 从年龄获取出生日期的逻辑以年月日表示

javascript - 对 useEffect 使用react,依赖数组仍在循环