最近写了很多源码分析相关的文章,React、Vue 都有,想把我阅读源码的一些心得分享给大家。React:

  • React 架构的演变 - 从同步到异步
  • React 架构的演变 - 从递归到循环
  • React 架构的演变 - 更新机制
  • React 架构的演变 - Hooks 的实现

Vue:

  • Vue 模板编译原理
  • Vue3 模板编译优化
  • Vue3 Teleport 组件的实践及原理

快速调试源码
说到看源码,很多人都有个误区,觉得看源码必须要到 github 上把完整的代码 clone 下来,认为只有把完整的代码下载下来,才能开始愉快的学习。
调试 React
这里我们先拿 React 举例,把源码 clone 下之后,整个人都懵逼了。

一般这时候会开始在网上搜文章,如何调试 React 源码。但是这种大型项目的构建流程较为复杂,如果只是想简单了解源码,不需要去了解这些复杂的东西。这里教大家一个简单的方案,直接到 CDN 上下载官方编译好了的开发版源码(cdn.jsdelivr.net/npm/react@1…),中间的版本号可以替换成任何想看的版本。

有了源码之后,我们要开始写 Demo,这时候如果自己搭一个项目就比较麻烦了,因为写 React 就会有 jsx,就需要 babel 进行 jsx 转义,这里推荐使用官方脚手架:<a href="https://github.com/facebook/create-react-app"> create-react-app。

这里我们需要稍微修改下 webpack 的配置,通过 react-app-rewired 修改配置。

然后,在文件夹内新建 config-overrides.js 文件,配置 webpack 的 externals 属性,让项目内的 react、react-dom 都能够走 window 下挂载的对象。

接下就是将 react 挂载到 window 上,把我们之前在 CDN 上下载的 develope 版的源码放到 public 目录,然后在 public/index.html 中引入源码。

然后通过 npm run start 正常启动项目就好了。

接下来就能愉快的搞事情,可以在 Chrome 的 Sources 面板里面开始 debug 之旅了,当然如果你更喜欢 console.log ,也可以在 public/react.js 里打上心爱的 log 。

调试 Vue
调试 Vue 比 React 更加简单,因为 Vue 支持浏览器进行模板编译。我们同样在 CDN 直接下载已经编译好的完整开发版(www.jsdelivr.com/package/npm…)。

然后,新建一个 vue.html ,把文件丢到本地的 http 服务里面。

我们现在已经可以直接开始调试 Vue3 的源码了,就是这么简单粗暴。当然,如果想通过 .vue 的方式写模板,还是得参照上面 React 提到的那种方式。
找准切入点
有了调试源码的方法,我们还需要找准一个切入点,不能为了看源码而看源码。所谓的切入点就是一个个小问题,比如我想要弄懂 Vue 的模板是如何转变成虚拟 DOM 的,我们可以先在官方文档查找资料,看有没有相关说明,幸运的是,Vue 官方文档在渲染函数-模板编译部分刚好这个问题有相关说明。

文档中提到了 Vue.compile ,然后我们就可以在源码中搜索这个 Api 开始进行调试。这就是带着目的去看源码,我们只有带着问题出发的时候,才会具有更高的效率。
除了带着问题出发,还可以参考其他优秀的文章,集千万网友的智慧于一体。当然这也是个双刃剑,因为你可能会搜到一些辣鸡文章,反而降低你的效率。而且,框架在迭代的过程中,变化会很多,可能你学习的是 React 16 的源码,搜到的 React 15 相关的文章,然后你会花很多时间和精力想去弄清楚为什么你看到的和别人写的为什么不一样,到底是你的打开方式不对,还是作者有笔误。
同时,还有一些文章喜欢画一些吸引眼球的架构图(我本人),看完你会直呼内行,但是这些架构图大多是站在作者个人的角度上的画的,很可能和你之前的角度不一样,又需要花一些时间来理解他的思路。如果,我们把庞大的项目拆分成一个个小小的问题之后,逐个击破,这时候再从全局的角度来思考整个框架的设计思路以及运行逻辑,就能事半功倍。
强制输出
有输出的学习才是学习,在阅读源码的过程中,一定得边看边思考,思考的过程中,还需要形成文字记录,如果只是一直盯着代码看,很难理解。
我在看源码的过程中,会一直思考,怎么样才能将这部分讲给别人听,是不是能写个 Demo 之类的,让大家跟着我的思路来学习。这样即让自己学懂了,又可以将学习的过程分享出来帮助到其他人,何乐而不为。

作者:Shenfq
链接:https://juejin.cn/post/6903335881227108366
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

易语言下载别人的源码编译出来用不了_我是如何阅读源码的相关推荐

  1. 易语言下载别人的源码编译出来用不了_如何编译下载的易语言源码

    很多刚刚接触易语言的网友不知道怎么使用易语言源码,其实易语言的源码也不过是一个加密的文本,里面只有易语言代码,要想使用需要使用易语言打开并编译为exe文件才能使用 1.易语言的源码是以 .e 为后缀的 ...

  2. 谈谈我是如何阅读源码的

    读源码的经历 刚参加工作那会,没想过去读源码,更没想过去改框架的源码:总想着别人的框架应该是完美的.万能的,应该不需要改:另外即使我改了源码,怎么样让我的改动生效了?项目中引用的不还是没改的jar包吗 ...

  3. 易语言支持库配置闪退丨支持库配置崩溃_易语言打开支持库配置就闪退怎么办?

    易语言支持库配置闪退打不开怎么办? 易语言支持库配置闪退解决方法丨支持库配置崩溃_易语言打开支持 易语言支持库配置闪退丨支持库配置崩溃_易语言打开支持库配置就闪退怎么办? 很多人都遇到过 打开易语言支 ...

  4. ubuntu下android源码编译环境,ubuntu12.04 64位上搭建android源码编译环境

    1.首先替换源为163的源,默认源下载速度太慢 sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup (备份下当前的源列表) sudo ...

  5. 易语言下载到c盘文件覆盖,易语言写到文件不覆盖

    易语言如何保存文本时不是覆盖而是续写下去 用这段时:写到文件 (取运行目录 () + "\保存在这里.txt", 到字节集 (写到文件 (取运行目录 () + "\保存在 ...

  6. 易语言微凉模块oracle,穿透框架全智能填表微凉网页填表模块及源码

    1.65以上版本将不兼容一下版本,不包含1.65..1.70许多填表规则会变得简单. 1.64更加人性化,增加了许多 通用方法_点击 通用方法_写内容 等等,还有跳过参数 , 删除了所有常量.因为没有 ...

  7. debian源码编译安装mysql5.6_MySQL 5.6 Linux Debian/Ubuntu源码编译安装 LNMP之MySQL

    安装所需依赖和工具apt-get install make gcc g++ libncurses5-dev cmake bison 配置cmake编译参数cmake . -DCMAKE_INSTALL ...

  8. 支付宝二维码可以抓包更改金额_好哒二维码6大功能,让你的生意“码”上火起来!会员、卡券、码上点餐...

    最近,身边很多开店的朋友感叹自己整天忙忙碌碌.辛苦无比但是店里生意就是不见好,其实我想对很多有相同感受的商户朋友们说也许,你只是少了一件让客源不断.收入飙升的法宝--盒子支付最新匠心产品好哒商户通-- ...

  9. 支付宝当面付扫码支付支付后不回调_支付宝当面付门店码

    政策简介:针对当面付的商家,支付宝推出商家数字化经营推广方案,该方案包含两个个政策:大促商家优惠券招商政策.门店码铺设政策,不同政策可获得不同的奖励. 政策奖励标准:(1)铺设奖励=有效门店码铺设数量 ...

最新文章

  1. rsa加密算法java实例,java实现的RSA加密算法详解
  2. springmvc整合swagger 与 常用注解说明
  3. html代码常用软件,HTML代码实际应用讲解
  4. SAP CRM WebClient UI和CRM Fiori应用里Opportunity的显示过滤逻辑
  5. python导出项目所依赖的所有的库文件以及安装
  6. 全排列及相关扩展算法(三)——利用中介数求排列在字典序排位算法
  7. Redis缓存安装Version5.0.7
  8. 排序算法部分知识点小结
  9. 手把手教你Dojo入门
  10. python openstackclient_在Linux系统上安装和配置OpenStack Client(客户端)的方法
  11. 关于C#中的get与set函数
  12. 在线制作车牌效果图_写实效果用3dsmax,想快用智能效果图软件
  13. 苹果cms 压缩html,解密苹果cms的player.js文件
  14. 在ppt中怎么加入倒计时 里面怎么加入倒计时【方法】
  15. 【文档/键值数据库】文档数据库和键值数据库有什么区别
  16. API_Day02_StringExcise
  17. 用unity制作简单的AR,亲测有效
  18. esc键 qt 退出菜单_【Qt】QDialog之屏蔽Esc键【转】
  19. DBA之路:小小DBA一年工作总结
  20. 解决安卓手机点击有效,苹果手机点击事件无效的问题

热门文章

  1. mysql安装了老版本_Windows 环境下 MySQL 5.7 安装配置指南
  2. python动态加载模块有什么用_人生苦短我用python(02)动态加载模块
  3. matlab基本使用指南
  4. matlab中未定义与 ‘cell‘ 类型的输入参数相对应的运算符 ‘+‘ 的解决方案
  5. 吴恩达机器学习学习笔记第三章:机器学习中的线性代数
  6. 西瓜书+实战+吴恩达机器学习(十)监督学习之支持向量机 Support Vector Machine
  7. Python3网络爬虫快速入门实战解析——对大佬部分代码失效的修改
  8. python接口自动化(四十四)- 公共模块configparser读取ini数据库、邮箱配置文件(单独说明)
  9. linux编译带pgm的zmq,ZeroMQ接口函数之 :zmq_pgm – ØMQ 使用PGM 进行可靠的多路传输...
  10. c语言程序输入n个数字排序,请问,C语言能人请进,用写一个程序,要求输入N个整数,按从小到大的顺序输出,就说说...