发现一个 useEffect 新用法: useEffect hook 模拟 react 的生命周期

2020-03-13 06:49:08 +08:00
 ericgui

https://sebhastian.com/react-hooks-useeffect

5887 次点击
所在节点    React
30 条回复
ericgui
2020-03-13 07:10:37 +08:00
给大家说说是什么情况吧:
Drawer 这个 component,show 这个 prop,只是隐藏这个 component,但不是销毁它。所以如果要想销毁,必须这样: `{ isDrawerActive && <Drawer show={isDrawerActive} />} `这样才能确保销毁。
我需要在销毁之前做点 clean up 的工作,所以要这么用:
```javascript
useEffect(()=>{
// do something here
return function cleanUp(){
// clean up job, for instance, destroy web worker
}
});
```
3. 好,为什么要这么用? useEffect 这个 hook,返回的这个 function,会在 component 销毁(unmount)之前被执行,于是,这个就可以用来模拟 ComponentWillUnmount 这个 lifecycle hook
noe132
2020-03-13 07:12:22 +08:00
这应该是正常用法而不是新用法
ericgui
2020-03-13 07:14:56 +08:00
@noe132 我这不是没见识么。。。。。轻拍
lemontv
2020-03-13 07:24:03 +08:00
useEffect 可以用来代替 componentDidMount componentWillUnmount componentDidUpdate
Perry
2020-03-13 07:36:21 +08:00
这不是新用法,这是 hook 存在的意义之一
blessyou
2020-03-13 08:14:44 +08:00
常规操作
iMusic
2020-03-13 08:41:21 +08:00
如果没看过官方文档自己发现的就牛逼
maichael
2020-03-13 08:49:34 +08:00
……你如果你看过它更新的 blog 或者文档你就应该不会现在才发现
BoiledEgg
2020-03-13 08:56:19 +08:00
随便搜一下 github,你会发现别人已经实现一整套了,比如 streamich/react-use
Cbdy
2020-03-13 09:04:51 +08:00
建议看一下官网文档,不然会闹出:我发现 C 语言新语法 switch 这样的笑话
leokino
2020-03-13 09:06:37 +08:00
嘴上说 “模拟生命周期” 的人基本上都没搞清楚 hook 的搞出来是干嘛的。
FaiChou
2020-03-13 09:19:15 +08:00
想必楼主也会发现,useEffect 可以接受第二个参数吧。
lneoi
2020-03-13 09:48:07 +08:00
这个是没看官方文档的问题
hoyixi
2020-03-13 09:59:50 +08:00
那 useEffect 的 “老“用法是啥?
islxyqwe
2020-03-13 10:18:53 +08:00
本来按照 react 的设计,组件不应该管理自己的生命周期,界面更新这些副作用都交给框架管理,但总还是有其他的副作用总是要处理的,所以才有生命周期。
现在有了 hooks,本来就是让你函数式风格的处理这些副作用,可以把副作用们按照功能聚合起来交给 react,而不是自己把多个副作用功能拆成各个时间点执行的东西分别放在各个生命周期方法。
soulmt
2020-03-13 10:19:46 +08:00
但凡你好好看看 useEffect 文档...
shuizhengqi
2020-03-13 10:29:12 +08:00
这个跟 componentWillDestory 有啥区别?
doublleft
2020-03-13 10:32:17 +08:00
react hooks 真是开到车…
TabGre
2020-03-13 10:35:27 +08:00
@doublleft 为什么是开到车呀?
hirasawayui
2020-03-13 10:37:38 +08:00
大家好,我今天发现了一个新的 api,console.log(),居然可以打印出东西来,好棒哦☆( ̄▽ ̄)/$:*

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

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

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

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

© 2021 V2EX