我发现我不喜欢用 react-hooks

2020-09-12 15:38:05 +08:00
 cl903254852

react-hooks 更适合写逻辑简单的小组件,遇到逻辑复杂的组件相较 class component 更难维护(不要跟我说逻辑拆分什么的)。

举个例子,我维护同事写的页面,如果是 class component 我一眼就能看明白整个组件结构,一下就能瞄到 componentDidMount

这是我个人的感想

4980 次点击
所在节点    程序员
33 条回复
wxsm
2020-09-13 10:40:39 +08:00
我举一个常见的例子,你要如何在 usecallback 里面访问变化的 state ?也许初学者会觉得直接访问就可以了,但是实际上不行。你必须用 useref 再对 state 进行一次包装,不然取到的永远是 state 的初始值。特别麻烦。相比来说,class 就简洁明朗得多。有些人就是无理由地喜欢函数式组件,简直跟处女情结一样,我觉得大可不必,这事要辩证地看。
amundsen
2020-09-13 10:43:28 +08:00
我写 hooks 写的很爽,class 组件完全被抛弃了。
vision1900
2020-09-13 11:24:21 +08:00
使用自定义 hook 时候简直像魔法
魔法是个好东西,因为神奇
魔法不是个好东西,因为神奇
StephenHe
2020-09-13 13:33:00 +08:00
感觉是 class 跟 hooks 一起用的问题。建议项目单用 class 、单用 hooks 。
mxT52CRuqR6o5
2020-09-13 13:57:13 +08:00
官方说是推荐新代码全部用 hooks,我个人的实际体验是用 hooks 要把 class component 的生命周期那套东西全都忘掉,就像张三丰学太极拳那样
haleyao
2020-09-13 17:49:21 +08:00
react-hooks 这么好用的东西都变成心智负担了,你们开发者真难伺候🐶
azcvcza
2020-09-14 09:52:13 +08:00
@wxsm 不用 ref,玩定时器总是会出错。
devwolf
2020-09-14 10:56:16 +08:00
@murmur 确实是两种思维方式啊,这点无可厚非。
但要说生命周期名称太长不提供补全,楼下也说了 vs code 打上插件照样可以补全。经常忙 react 开发的都能记得常用的生命周期吧,命名挺规律的……

@Jirajine 我还在想我为什么比起 hooks 更能接受 class 组件,这么看来还真可能因为早期 vue 的熏陶(我个人是先接触的 vue 应付的毕设,然后面到公司让自学转 react 了)
devwolf
2020-09-14 10:59:16 +08:00
lz 加油,共勉吧。
我自己也知道 hooks 是个好东西,加上楼上的大佬们也都分析了,早学会早升值奥
murmur
2020-09-14 11:00:05 +08:00
@duan602728596 这里又有一个老生常谈的问题,就是 useXXX 判断变量变化的比较标准是什么,新东西肯定会有新坑的
namelosw
2020-09-14 19:34:37 +08:00
你不喜欢是因为你不懂函数式编程,并不是 class 的可维护性更好。实际上 class 的可维护性更差。

要完全融会贯通可以练一练 OCaml 。React 是用 SML 和 OCaml 写的原型,hooks 可以算是回归初心。
Philippa
2020-09-14 20:48:35 +08:00
hooks 我喜欢,太多逻辑就自定义 hooks,只要排好版合理分拆其实两种写法区别不大。不过楼主贴的 vue 看起来也不错啊,可要我选还是用 hooks,一般我很排斥包含有属性之类的东西,觉得 hooks 和纯函数写起来少点心智负担。
KuroNekoFan
2020-09-16 15:28:54 +08:00
@wxsm 可以考虑用 setState 用函数形式然后再把参数原封不动返回去,没必要用 useRef,官方文档本身也不推荐用 useRef

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

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

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

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

© 2021 V2EX