React useHooks 以及高阶函数 是不是某种程度上和传统的面向对象类这些类同

2024-07-09 10:43:33 +08:00
 ZGame

useHooks 某种程度上可以由类组合生成代替, 高阶函数 有点像函数式的抽象类? 有大佬谈谈有啥优缺点吗,还是说本质上是前端领域一种函数式的对类概念的替换?

2286 次点击
所在节点    React
10 条回复
codehz
2024-07-09 10:50:13 +08:00
就是 js 用不了代数效应,所作的一个拙劣模仿而已(
changwei
2024-07-09 11:00:43 +08:00
面向对象的写法问题主要在于会把同一个业务逻辑的代码分散到多个 lifecycle ,而 hook 刚好解决了这个问题
至于 useState 这种内置 hook 只是因为 function 的写法没办法调用 this.setState 而创立的
Java 这些传统面向对象编程语言其实有用 annotation+AOP 的方式来解决业务逻辑必须要分散到多个生命周期的问题,而 JavaScript 这边的 decorator 好像迟迟没有纳入 ECMAScript 标准,除了 nest.js 和 mobx 以外比较少有框架在用“非标准”的 decorator 特性
ZGame
2024-07-09 11:13:56 +08:00
@changwei 我只是突然感觉 类本身也可以实现非 lifecycle ? 其实就是类似后端容器 bean 的概念, 做一组静态方法,和容器类 一样可以实现非 lifecycle? 或者是因为有了 useState 这些的 api ,所以就自然而且的往 hook 发展了
nulIptr
2024-07-09 11:20:13 +08:00
@changwei 虽然 hooks 已经写了好几年了,但还是理解不了为啥 [把同一个业务逻辑的代码分散到多个 lifecycle] 是一个问题,从 mfc 开始就这么写,各种插件化开发其实也就是暴露不同生命周期时点,甚至写业务代码中经常会写一个 init 方法和 distory 方法放到一个单独的 effect 里面,可能是我道行太浅。。。
ZGame
2024-07-09 11:38:53 +08:00
@nulIptr 我是感觉能一定程度上减少意大利面条代码, 相关逻辑的状态和副作用,方法可以放在一个 hooks 里,但是其实类本身也能做到这一点 可以定义切片 和分发处理。。。 就是突然陷入了 '先有鸡还是先有鸡蛋的问题', 是不是因为搞了 useState 这类 api 然后顺势就产生了 hooks
chenliangngng
2024-07-09 14:41:01 +08:00
usehooks 就是函数式编程的组合,完全践行了组合大于继承,基本上你永远都无需使用继承

其实不论是组合 compose ,管道 pipe ,还是高阶函数,都是 fp 的基础知识,不要拿 oop 去套
ZGame
2024-07-09 15:09:32 +08:00
@chenliangngng 我知道组合大于继承,只是比较困惑 oop 那套一样能实现组合,useHooks 函数式的写法更像是对类的概念本身做裁剪,和约束,反过来指导程序编程,但是感觉 react fp 这种本身又引入了新的复杂度,和调试困难。
lisongeee
2024-07-09 15:12:03 +08:00
chenliangngng
2024-07-09 16:16:35 +08:00
@ZGame 你想写好 react hooks ,就要把类这个概念忘掉,没有类
ivslyyy
2024-07-10 04:00:38 +08:00
oo 和 hooks ,
---
组合优于继承

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

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

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

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

© 2021 V2EX