下面这个 react 的 useeffect 代码中的 return 卸载,清理函数为什么不运行

2024-02-03 03:35:09 +08:00
 gokiller

在看一本 react 书时,它是这么写的。

function App1(){
  const handleWindowsResize=()=>{
    console.log('windows size change')
  }


  useEffect(()=>{
    console.log('called')
    const timerObj = setInterval(()=>{
      console.log('每秒+1')
    },1000)

    window.addEventListener('resize',handleWindowsResize)

    return ()=>{
      console.log('clear')
      clearInterval(timerObj)
      window.removeEventListener('resize',handleWindowsResize)
    }
  },[])


  return (
    <div>
      Hello world
    </div>
  )
}

console 里面会定时输出 windows size change ,而不会进入到 useEffect 里面清除定时器。 根据对书中理解,return 函数是在第二次执行 useEffect 之前执行的? 而上面的 useEffect 只会执行一次,是不是意味者 return 函数里面的代码不会被执行?

1920 次点击
所在节点    React
7 条回复
likaci
2024-02-03 04:29:50 +08:00
组件销毁时会执行, strict 模式下也会执行一次...
estk
2024-02-03 08:26:22 +08:00
你实测的结果是怎样的?
Perry
2024-02-03 08:39:01 +08:00
xling
2024-02-03 08:58:13 +08:00
你的组件没销毁
zhw2590582
2024-02-03 11:44:10 +08:00
useEffect 真是让人疑惑,写久了 react 也会遇到一些意向不大的情况
leaflxh
2024-02-03 11:57:16 +08:00
对于初学者写 class 组件或者能更好理解,但是现在已经过时了 ,只推荐用 hook
gokiller
2024-02-03 12:34:44 +08:00
@xling 对,知道问题所在了,感谢。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1013796

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX