正在学习中,感觉两种方式写起来是差不多的? 在实际工况中这两种写法差距很大吗?
1 zhigewuwang 2021-10-12 14:41:50 +08:00 函数组件 是指 hook 写法吗? 复杂的逻辑我喜欢用类组件,更好管理。 简单的就用 hook 写法。少敲些代码 |
2 ReferenceE 2021-10-12 14:42:51 +08:00 via Android 建议还是用纯函数作为组件 React 官方写过: 1.函数可以直接等级提升,类不会等级提升(大概是会把定义放到最开头) 2.类的函数分了三类 挂载前,更新时,unmount 后 函数用的是 useEffect 一系,功能一样,写法不同 |
3 xinhaiw 2021-10-12 14:50:16 +08:00 类就是原罪知道吗。 |
![]() | 4 wobuhuicode 2021-10-12 14:52:05 +08:00 via iPhone 要理解 hook,首先要理解 react 团队对于 ui 的定义 ui = fn(state) 很纯粹的一个概念。早期由于在纯函数下没有很好的方案去存储状态。所以才用比较普遍的 class 写法。 |
![]() | 5 JerryCha 2021-10-12 14:58:46 +08:00 JS 的类容易陷入坑里,能少用还是少用 |
6 aikilan 2021-10-12 15:04:43 +08:00 ![]() 类组件 函数组件都写过完整的项目,没啥太大区别,HOOKS 写法的好处是可以把组件细化到很小,HOOKS 封装的好可以省不少工作,而且可以用 useContext 、useReducer 一类的来管理全局变量,省不少事儿。 类的话生命周期比较清晰,一般来说不会犯什么大错误。比如 HOOKS 要判断更新需要自己去管理 dep 一类的,当然一个熟练的工人,这些都是小事儿。 |
![]() | 7 zhouyg 2021-10-12 15:14:34 +08:00 简单,逻辑清晰 |
![]() | 8 rodrick 2021-10-12 15:21:14 +08:00 写起来舒服点吧 this 的坑也不会有 |
![]() | 9 HXHL 2021-10-12 15:26:48 +08:00 via iPhone 代码少,写的舒服。 |
![]() | 10 kidlj 2021-10-12 15:39:59 +08:00 Who is this? |
![]() | 11 tonytonychopper 2021-10-12 15:54:10 +08:00 类组件有个好处就是不容易犯错,各种生命周期把你安排得明明白白 |
12 Robertwhite 2021-10-12 16:28:36 +08:00 自定义 hooks 用来复用 /分离逻辑,还是很爽的,用类的话好像高阶组件、render props 这些方式都不太优雅 |
13 pigspy 2021-10-12 16:34:55 +08:00 我写的应用不太复杂,先用类组件写了一遍,然后重构成函数组件,感觉区别不大 |
![]() | 14 yl20181003 2021-10-12 16:39:10 +08:00 不用写 render |
15 copper20 2021-10-12 16:39:10 +08:00 简而言之,更帅,更优雅 |
![]() | 16 ryougifujino 2021-10-12 16:39:58 +08:00 函数式组件样板代码比类要少 |
![]() | 17 lisongeee 2021-10-12 17:53:35 +08:00 组件有时候会不可避免地存在多个小功能。类的写法会导致 这些小功能管理起来很混乱,而且互相之间没有作用域隔离,代码很多的时候你需要在多个生命周期函数之间来回跳转。hook/composition-api/ 可以让这些小功能更加内聚,便于管理。 aHR0cHM6Ly92My5jbi52dWVqcy5vcmcvZ3VpZGUvY29tcG9zaXRpb24tYXBpLWludHJvZHVjdGlvbi5odG1sIyVFNCVCQiU4MCVFNCVCOSU4OCVFNiU5OCVBRiVFNyVCQiU4NCVFNSU5MCU4OCVFNSVCQyU4Ri1hcGk= |
![]() | 18 shabbyin 2021-10-12 17:58:43 +08:00 19 年在团队内部分享的时候我说过一个我自己的观点 > Hooks 组件的目标并不是取代类组件,而是增加函数式组件的使用率,明确通用工具函数与业务工具函数的边界,鼓励开发者将业务通用的逻辑封装成 React Hooks 而不是工具函数。 对普通组件来说用类和 class 写起来完全没有任何区别 但是 hook 好的一点在于 可以有自己内部的状态 可以自己获取 redux 的数据去做处理 那么就不需要我们自己写一个 util 然后往里面传一堆参数来复用同一套业务逻辑了 更不用说 hook 还能做 memo 自定义事件挂载卸载可以在一个 useEffect 里完成这些东西 而 hook 只能用在函数组件中 所以那就开始用呗 毕竟函数式编程也是流行趋势 |
![]() | 19 huai 2021-10-12 18:05:21 +08:00 1.不需要理解 this , 虽然也不是很复杂,就几个规则记住即可 2.在调试的时候, 函数组件,没有那么多嵌套(我基本不调试,对我没差 |
![]() | 20 lanten 2021-10-13 09:38:15 +08:00 @ReferenceE 只有用 function 关键字才会提升吧?在用 TS 的情况下,似乎只能用箭头函数的方式赋予 React.FC 泛型,还有 React.memo,也不能用 function 关键字声明。 函数式组件每一次 rerender 都会执行函数体内的所有代码,需要通过 useEffect 和 useCallback 优化,增加了开发者的心智负担,尤其对于新手而言更容易写出低性能代码。 函数式组件还不能被继承,我认为函数式组件除了 hooks 复用一无是处 |
![]() | 21 lanten 2021-10-13 09:47:02 +08:00 @Robertwhite 考虑一下把高阶组件换成修饰器,需要复用的东西采用抽象派生,那才叫优雅 |
22 danytdlemon1900 2021-10-13 17:45:22 +08:00 @lanten 很难不赞同 |
![]() | 23 biguokang 2021-10-14 03:41:22 +08:00 以前没有 hook 的时候,类组件的抽象能力高,复用性强,组装起来灵活(虽然使用起来很繁琐,比如高阶组件看的脑壳疼),所以不得不用类组件 现在有了 hook,就可以使用函数组件 |
24 ReferenceE 2021-10-15 19:00:58 +08:00 via Android @lanten 各有各的看法吧,上家的规范就是要求全部 function |