React Hooks 核心原理与实战
王沛
eBay 中国研发中心资深技术专家
10740 人已学习
新⼈⾸单¥59
登录后,你可以任选2讲全文学习
课程目录
已完结/共 25 讲
React Hooks 核心原理与实战
15
15
1.0x
00:00/00:00
登录|注册

02|理解 Hooks:React 为什么要发明 Hooks?

你好,我是王沛。
React 作为目前最为主流的前端框架,自 2013 年诞生至今已经有近 8 年的时间了。这 8 年来,在其他前端框架发生翻天覆地变化的同时,React 的 API 则非常稳定,几乎从来没有出现过重大的向后兼容的问题,而且每一次版本的升级也都非常顺滑。
这不仅说明 React 在 API 的设计上经受住了考验,同时也可以看到 React 团队在稳定 API 上所做的努力。
但是即使在这样稳定的背景下,React 还是在两年前的 16.8 版本中推出了一套全新的 Hooks 机制。新版本的发布,在让人耳目一新的同时,也让广大早就恐惧于各种新轮子的前端同学心头一紧,产生本能的抗拒:这是什么东西?有什么用?难道现在的 API 不好吗?
如果你也有这样的疑问,那我要先给你吃一颗定心丸,这样的担忧是没有必要的。
其实对于 React 开发而言,这只是多了一个选择。因为原来的基于 Class 的组件完全可以继续使用,这意味着这两种开发方式可以并存,已有代码不需要做任何改动,而新的代码可以根据具体情况采用 Hooks 的方式来实现就行了。
那么,既然在追求极致向后兼容性的原则下,React 还是推出了新的 Hooks API,一定有其过人的一面。所以今天这节课,我就跟你一起探讨它的过人之处究竟是什么;为什么要发明 Hooks;以及它所解决的问题是什么。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

React Hooks 是 React 16.8 版本中推出的一套全新的 API 机制,旨在解决函数组件无法存在内部状态、提供完整生命周期机制的问题。文章通过重新思考 React 组件的本质,指出函数组件更适合表达 React 组件的执行逻辑,但由于缺少状态和生命周期机制,其功能受限。随后,文章介绍了 Hooks 是如何诞生的,指出 Hooks 机制将某个目标结果钩到可能会变化的数据源或事件源上,当这些数据或事件发生变化时,相关代码会重新执行,产生更新后的结果。Hooks 的最大好处在于逻辑的复用。总的来说,React Hooks 的出现为函数组件的开发提供了更多选择,使得函数组件的力量得以真正发挥出来。 React Hooks 带来的最大好处是逻辑复用。在之前的 React 使用中,实现逻辑复用常常需要借助于高阶组件等复杂的设计模式,而 Hooks 则简化了逻辑复用的过程,避免了产生冗余的组件节点,使代码更加简洁和直观。另一大好处是有助于关注分离,让针对同一个业务逻辑的代码尽可能聚合在一块儿,从而让代码更容易理解和维护。Hooks 作为 React 自诞生以来最大的一个新功能,得到了普遍好评,成为了 React 开发的主流方式,更好地体现了 React 的开发思想。虽然 Hooks 解决了 Class 组件存在的一些问题,但两种方式在 React 开发中几乎是完全等价的,没有绝对的优劣。如果决定开始使用 Hooks,对于已有的 Class 组件,其实是完全没必要进行立刻重构的,只要在新的功能上再来使用函数组件和 Hooks 就可以了。 总的来说,React Hooks 的出现为函数组件的开发提供了更多选择,使得函数组件的力量得以真正发挥出来。Hooks 带来的最大好处是逻辑复用和有助于关注分离,让代码更加简洁、直观,易于理解和维护。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《React Hooks 核心原理与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(37)

  • 最新
  • 精选
  • 开开之之
    老师,为什么说react组件不会相互继承?我之前做过一个项目,就是通过继承来实现代码复用的

    作者回复: 组合的话组件之间就仅仅需要通过 props 的方式来互相交互,依赖关系更加清楚,组件内聚性更好。继承会让两个组件紧密耦合到一起。继承也不是完全不能用,只是非常不推荐。在 React 中,继承要达到的目的用组合完全可以 cover。

    2021-05-30
    12
    28
  • 闲闲
    老师我有个疑问,麻烦看到帮忙解答一下: 上面的例子里面说是窗口大小发生变化,组件就会更新,对于这一点我不太理解,class封装的还可以理解为,state发生改变了,导致重新render了,但是hook感觉这么理解不通顺,hook哪里写的就类似一个纯函数调用,是怎么驱动组件重新更新的呢?

    作者回复: 很好的问题。自定义 Hooks 触发组件更新的机制是调用 useState 这一类内置的,能触发组件更新的 Hooks。所以在窗口大小变化的例子中,在事件监听中通过 setSize 这个 useState 得到的方法去设置 size,从而组件就更新了。

    2021-05-31
    5
    15
  • 凡凡
    路由变化可以作为数据源吗

    作者回复: 可以的,像 react router 就提供了这个 Hook,也有一些第三方 library 也提供了,比如:https://github.com/streamich/react-use/blob/master/src/useLocation.ts 就是一个实现。

    2021-05-27
    9
  • Geek_d221bc
    王老师,你好,想请教hooks是如何让函数组件具备随状态变化触发组件重新执行返回更新的呢?这是要去读hooks相关源码?

    作者回复: 不需要读源码。Hooks 让组件刷新和传统 class 组件触发刷新的机制是完全一样的,都是由 state 或者 props 变化触发。Hooks 中的 useState 和 class 中的 setState,背后是同一套实现,理解这一点就可以了。

    2021-07-12
    5
  • 刘洋
    多久更新完啊

    编辑回复: 每周二四六更新,预计7月13日更新完毕

    2021-05-27
    4
  • Geek_9878c1
    最喜欢的React地方就是 “在其他前端框架发生翻天覆地变化的同时,React 的 API 则非常稳定,几乎从来没有出现过重大的向后兼容的问题,而且每一次版本的升级也都非常顺滑。“ , 隔多久都没有隔阂

    作者回复: 确实如此~ 说明 API 经受住了考验,能满足不断发展的需求变化:-)

    2021-06-06
    2
    3
  • 独白
    思考题:首先想到的是官方的一个api useReducer。还有的话,就是监听滚动条向上向下呀。 看了老师这节课,才弄清除hooks真正重要的东西是啥。

    作者回复: 说的很好啊~ useReducer 是个比较通用的,类似于 useState 但是按照 Redux 的模式提供了一定的统一 state 管理机制。滚动条位置确实是个很好的例子,开发中也经常用到,在第6课就会讲到这个例子。

    2021-05-27
    3
  • 小馋猫
    hooks没有出现之前如果想实现逻辑复用只能通过高阶组件的方式来实现

    作者回复: 是的,还有 render props 模式,后面会有介绍~

    2021-06-01
    2
    2
  • 哈哈哈[吃瓜]
    求教 我还是对hook的想法有一些疑问 主要是开发思想上 之前一直用jq 最近才看react 总是感觉有点别扭。 用hook的时候总是想 setState了之后 函数再运行一遍会有什么结果 总是在脑补函数组件内部的运行顺序 感觉一直在函数组件内部打转。 蓝黄对比那个图 useEffect为什么要写两个 另外怎么能更好的从jq这种可以很细的去操作dmo的开发思想上转变到react上来呢?

    作者回复: 理解函数组件有点像理解显示器的工作原理,你可以认为函数组件的一次执行就是一次屏幕的刷新重绘。我们要控制的就是何时触发刷新。 useEffect 可以写多个,从而把多个业务逻辑分开来,每一个做自己的事情。 从 jq 转过来,主要就是把 UI 完全看成状态驱动。

    2021-07-21
    1
  • 寇云
    定时器,监听滚动,键盘事件,复用Fetch。

    作者回复: 👍🏻

    2021-06-04
    1
收起评论
显示
设置
留言
37
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部