28-总结篇-如何有效阅读源码
课程
1
写给想要进阶的你
已学完
学习时长: 4分28秒
2
基础篇-认识 jsx
已学完
学习时长: 40分51秒
3
基础篇-起源 Component
已学完
学习时长: 32分50秒
4
基础篇-玄学 state
已学完
学习时长: 33分37秒
5
基础篇-深入 props
已学完
学习时长: 43分58秒
6
基础篇-理解 lifeCycle
学习时长: 72分46秒
7
基础篇-多功能 Ref
已学完
学习时长: 71分17秒
8
基础篇-提供者 context
已学完
学习时长: 53分16秒
9
基础篇-模块化 css
学习时长: 35分20秒
10
基础篇-高阶组件
学习时长: 43分29秒
11
优化篇-渲染控制
学习时长: 50分4秒
12
优化篇-渲染调优
学习时长: 35分8秒
13
优化篇-处理海量数据
学习时长: 28分1秒
14
优化篇-细节处理(持续)
学习时长: 32分19秒
15
原理篇-事件原理
学习时长: 30分48秒
16
原理篇-调度与时间片
学习时长: 23分47秒
17
原理篇- 调和与 fiber
学习时长: 35分54秒
18
原理篇-Hooks 原理
已学完
学习时长: 34分34秒
19
生态篇-React-router
学习时长: 50分9秒
20
生态篇-React-redux
学习时长: 50分34秒
21
生态篇-React-mobx
学习时长: 65分3秒
22
实践篇-实现mini-Router
学习时长: 37分19秒
23
实践篇-表单验证上
学习时长: 41分49秒
24
实践篇-表单验证下
学习时长: 46分31秒
25
实践篇-自定义弹窗
学习时长: 35分4秒
26
实践篇-自定义 Hooks 设计(持续)
学习时长: 32分13秒
27
实践篇-自定义 Hooks 实践(持续)
学习时长: 58分47秒
28
总结篇-如何有效阅读源码
学习时长: 7分18秒
29
原理篇-Context原理
学习时长: 28分27秒
30
原理篇-beginWork和render全流程
学习时长: 38分16秒
31
V18特性篇-useMutableSource(已被取缔)
学习时长: 28分37秒
32
V18特性篇-transition
学习时长: 38分15秒
33
原理篇-更新流程:进入调度任务
学习时长: 30分20秒
34
v18特性篇-concurrent 下的 state更新流程
学习时长: 29分27秒
35
v18特性篇-订阅外部数据源
学习时长: 16分53秒
36
原理篇-v18commit全流程
学习时长: 45分40秒
37
v18新特性-Offscreen
学习时长: 1秒
38
实践篇-设计并实现 keepalive 功能
学习时长: 71分13秒
juejin_logo copyCreated with Sketch.

前言

一流工程师天生充满了责任感和好奇心,他们大都满怀信心但却虚怀若谷,他们直接但不粗鲁,他们不推诿,他们不在乎工作边界,以团队任务而不是自己的工作任务为模板。我不止一次领教过一流工程师的威力,他们不止能把事情做对,还能把事情做好。他们能在完成开发的同时还能把团队不必要的沟通、返工和流程成本降到最低,更能防患于未然,把各种凶险消弭于无形。 --《浪潮之巅》:吴军博士讲述硅谷IT发展史

在目前读者的反馈中,说到小册里面的源码部分看起来比较头疼,很难理解。实际我在小册中放了一些源码主要为了让大家了解 React 中一些核心细节和主要流程。只有知道这些,才能更熟练的运用 React ,才能更好地解决工作中一些复杂的场景问题。接下来我把我阅读源码的心得分享给大家,希望能对大家有帮助。

如何高效阅读源码(彩蛋)

在阅读源码过程中,我遵循这几个技巧,感觉很有效果。

1 知己知彼

首先在阅读源码之前,第一步就是要明白看的是什么? 是否熟悉里面的 api? 是否在真实的项目中使用过? 如果对于同一个库,工作中使用过的开发者看源码,要比没有使用过直接看源码,容易的多。

  • 比如想看 react-redux 源码,就要先知道 react-redux 中 Provider 是做什么的 ? connect 怎么使用的,它有几个参数,每个参数有什么意义?
  • 比如想看 mobx-react 源码,就要先知道 mobx-react 中 injectobserver 的作用。

开发者对一个库或者一个框架越熟悉,看源码也就越容易,甚至如果真的精通一个框架本身,那么很有可能不看源码就猜到框架内部是如何实现的,正所谓庖丁解牛。

2 渐进式|分片式阅读

看源码千万不要想着一口气吃成个胖子,作者看 React 源码,陆陆续续看了一年,当然不是天天都在看,但是中间也没有间隔太久,如果想要快速看完源码,懂得原理,那么只能从看源码到放弃

作者看源码遵循 渐进式 ,分片式 原则。

  • 渐进式: 拿 React 为例子🌰,如果一上来就看 React 核心调和调度流程,那么一下就会蒙,就会找不到头绪,看着看着就会变成看天书,所以可以先看一下基础的,比如 fiber 类型,React 如何创建 fiber ,每个 fiber 属性有什么意义。然后再慢慢渗透核心模块,这样效果甚佳。
  • 分片式:对于一个框架的源码学习,要制定计划,化整为零,每天学习一点点,每一次学习都做好笔记,两次学习的间隔最好不要太长时间。

3 带着问题,带着思考去阅读

带着问题学习源码是最佳的学习方案,而且作者可以保证,这种方式每一次看都会有收获。即使很多开发者看源码坚持不下去,就是因为没有带着问题,没有去思考。

如果没有问题的去看源码,看着看着就会变得盲目,而且很有可能犯困。这样是坚持不下去的。

那么如何带着问题去思考呢? 作者这里举了个例子🌰,比如现在想看 React Hooks 源码。那么我写一段 React Hooks 代码片段,看一下可以从中汇总出哪些问题?

import React , { useContext , useState , useRef, useEffect, useLayoutEffect, useMemo } from 'react'
const newContext = React.createContext(null)
/* ① React Hooks 必须在函数组件内部执行?,React 如何能够监听 React Hooks 在外部执行并抛出异常。  */
const value = useContext(newContext)
console.log(value)
function Index(props){
    const [ number, setNumber ] = useState(0)
    // ②  React Hooks 如何把状态保存起来?保存的信息存在了哪里?
    let number1 , setNumber1
    // ③ React Hooks 为什么不能写在条件语句中?
    if(props.isShow) [ number1 , setNumber1 ] = useState(0)
    const cacheState = useRef(0)
    const trueValue = useMemo(()=>{
        // ④ useMemo 内部引用 useRef 为什么不需要添加依赖项,而 useState 就要添加依赖项
        return number1 + number + cacheState.current
    },[ number ,number1 ])
    // ⑤ useEffect 添加依赖项 props.a ,为什么 props.a 改变,useEffect 回调重新执行。
    useEffect(()=>{
        console.log(1)
    },[ props.a ])
    // ⑥ React 如何区别 useEffect 和 useLayoutEffect ,执行时机有什么不同?
    useLayoutEffect(()=>{
        console.log(2)
    },[])

    return <div>《React 进阶实践指南》</div>
}

从上面的一段代码中,可以提炼出的问题有:

  • ① React Hooks 为什么必须在函数组件内部执行?React 如何能够监听 React Hooks 在外部执行并抛出异常。
  • ② React Hooks 如何把状态保存起来?保存的信息存在了哪里?
  • ③ React Hooks 为什么不能写在条件语句中?
  • ④ useMemo 内部引用 useRef 为什么不需要添加依赖项,而 useState 就要添加依赖项。
  • ⑤ useEffect 添加依赖项 props.a ,为什么 props.a 改变,useEffect 回调函数 create 重新执行。
  • ⑥ React 内部如何区别 useEffect 和 useLayoutEffect ,执行时机有什么不同?

如果带着以上问题去阅读源码,相信阅读之后肯定会有收获。这种带着问题去阅读好处是:

  • 能够从源码中找到问题所在,更一针见血的了解原理
  • 能让阅读源码的过程变得不是那么枯燥无味,能够更加坚定阅读

披荆斩棘 ,勇往直前!

这本小册作者从 2020 年就开始整理,2021 年四月初开始正式写,写了正好四个月。 四个月里作者拒绝一切社交活动,没有一个周末休息过,把 React 知识点,从点到线再到面的串联起来,展现给大家,可能写的比较仓促,有一些错别字,如果给大家阅读带来不便,还请大家见谅,我会一直维护这本小册,修复错别字和不正确的地方,对小册的内容做技术翻新,对小册内容做补充,特别是持续维护的章节(第十四章,第二十六章,第二十七章)。

“路漫漫其修远兮,吾将上下而求索” ,希望阅读到这里的每一个读者,不要把掌握小册的知识点作为学习 React 的终点,而是要当成学习的起点,带着对 React 全新的认识去使用,平时工作中要多敲多练,多学习一些 React 设计模式,多写一些自定义 Hooks 。在 React 技术成长之路上披荆斩棘 ,勇往直前!

最后的最后感谢大家支持我,认可我,祝福大家早日进阶 React 技术栈,在成长的道路上我与你们同行。🙏🙏🙏

如果在阅读过程中有什么问题欢迎大家加我微信,交个朋友,微信:TH0000666,也可以关注笔者公众号 前端Sharing,持续分享前端硬核文章~

11118.jpg

留言
Ctrl + Enter
全部评论(25)
levi_m的头像
删除
前端
还是得看源码之后才能看这本小册,不然似懂非懂~
点赞
回复
console_man的头像
删除
Web前端
【带着问题学习源码是最佳的学习方案】这句话太赞同了
点赞
1
删除
是的
点赞
回复
金鱼同学啊的头像
删除
库洛牌学院
作者写的很好,很用心[赞]
点赞
1
删除
感谢啦
点赞
回复
妖猴的头像
删除
想请教一下,作者是如何阅读源码的,直接在项目里打debugger调试么?我调试的时候好像会进入压缩丑化后的代码
点赞
2
删除
webpack配置source-map,映射源代码
1
回复
删除
开发环境的代码是不会被压缩的
点赞
回复
桔子桔子的头像
删除
FE @ 某互联网公司
作者很认真了,虽然核心的源码我没看懂[流泪]
1
1
删除
加油,陆续更新
1
回复
用户9726643167141的头像
删除
真的很硬核,赞!
1
1
删除
非常感谢哈
点赞
回复
rocky191的头像
删除
前端小菜鸟 @ 创业公司
不错[赞]
2
1
删除
[玫瑰][玫瑰][玫瑰][玫瑰]
点赞
回复
Kabuto甲斗的头像
删除
还没看完,但是看得出作者很认真,个人认为是买过的小册里面写的最用心的一本了,支持!💪
4
1
删除
非常感谢支持呀
点赞
回复
芹菜006的头像
删除
这本小册子也应该分片学习,用哪块,看哪块。
4
1
删除
哈哈,非常感谢兄弟支持呀
点赞
回复
网瘾新之助的头像
删除
前端工程师
很不错的小册子,借助基础篇又温故了一遍react
1
1
删除
非常感谢哈
点赞
回复
Upain的头像
删除
web前端 @ 阿里巴巴
终于看完了...[呲牙]
2
1
删除
加油
点赞
回复
前半的头像
删除
占个前排,后续补上
2
回复
阿秉秉一直在努力的头像
删除
前端 @ 京东
给同事加油
3
1
删除
🌹🌹🌹
点赞
回复