React 在加载时只调用一次方法

Dav*_*ell 14 reactjs

我是 Hooks 的新手,并且遇到了一些让我追尾的案例。

希望有人可以解释或提供对我有意义的解决方案:

  1. 在安装组件时只加载一次方法是令人困惑的。我试过这个方法,它有效,但不明白。谁可以给我解释一下这个:

    const useMountEffect = fun => useEffect(fun, [])
    
    useMountEffect(() => {
      if (!isEdit) handleAddRow()
    })
    
    const handleAddRow = () => {
      let appendArr = [...listArr, '']
      setListArr(appendArr)
    }
    
    Run Code Online (Sandbox Code Playgroud)

关注此线程: 如何使用 React useEffect 仅调用一次加载函数

我尝试只使用没有依赖关系的 useEffect 并且 eslint 不喜欢那样,他们建议添加一个似乎有点 hacky 的跳过下一行:

// eslint-disable-next-line
Run Code Online (Sandbox Code Playgroud)

Pri*_*Das 61

如果我是对的,你想要类似于componentDidMount生命周期方法的东西。这样做的方法是

function MyComponent(props){
    useEffect(()=>{
        // do stuff here...
    }, []) // <-- empty dependency array
    return <div></div>
}
Run Code Online (Sandbox Code Playgroud)

要了解发生了什么,您需要了解 useEffect 钩子的工作原理。使用没有任何依赖关系的 useEffect 钩子将在每次某些状态或道具更改并导致重新渲染时触发效果。但是如果我们传递一个空数组作为依赖项,它将作为效果不依赖于其他任何东西,因此它只会在组件安装时触发。

  • 为什么这么多人提出问题,却懒得返回并通过点击答案“已回答”来奖励正确的答案?询问别人的时间而不奖励/感谢他们似乎不太好。我经常看到这种情况。返回一个问题并标记它有多难? (15认同)
  • 严格模式使 useEffect 运行两次。 (4认同)
  • 噢,天哪……这里是 React 的新手,从基于类的组件中移走似乎很混乱,并将其视为解决方案勾选了所有混乱框。“useEffect”用于像构造函数一样的一次性执行行为。精彩的。 (3认同)

Mr *_*nce 8

对于任何希望每个整个应用程序(全局)执行一次函数的人来说,这可能是一个解决方案:

\n
if (typeof window !== \'undefined\') { // Check if we\'re running in the browser.\n   // \xe2\x9c\x85 Only runs once per app load\n  checkAuthToken();\n  loadDataFromLocalStorage();\n}\n\nfunction App() {\n  // ...\n}\n
Run Code Online (Sandbox Code Playgroud)\n

来源/扩展解释在这里

\n


Jon*_*win 5

useEffect()需要 2 个参数 - 您的函数和依赖项。依赖部分告诉它什么时候运行你的函数——如果依赖没有改变,它就不会再次运行。如果依赖项确实更新,它将再次运行您的函数。

  • 感谢您的回复。1. 如果您离开 useEffect() 而不使用依赖项,您会收到 eslint 错误。2. 当我使用 `const useMountEffect = fun =&gt; useEffect(fun, [])` 方法时,我没有收到 eslint 错误。有人可以解释为什么吗? (2认同)
  • 小心,严格模式会触发你的 useEffect 两次(开发模式) (2认同)