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

292 天前
 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 函数里面的代码不会被执行?

1767 次点击
所在节点    React
7 条回复
likaci
292 天前
组件销毁时会执行, strict 模式下也会执行一次...
estk
292 天前
你实测的结果是怎样的?
Perry
292 天前
xling
292 天前
你的组件没销毁
zhw2590582
292 天前
useEffect 真是让人疑惑,写久了 react 也会遇到一些意向不大的情况
leaflxh
292 天前
对于初学者写 class 组件或者能更好理解,但是现在已经过时了 ,只推荐用 hook
gokiller
292 天前
@xling 对,知道问题所在了,感谢。

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

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

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

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

© 2021 V2EX