前言

距离第一篇《React源码解析(一)》已经过去将近4个月的时间,由于是我第一次进行源码解析相关的写作,思路和文笔还不够成熟。一百多天以来,我基于读者反馈反思这几篇文章中的不足,同时也在不断学习借鉴其他优秀作者的写作方法和写作思路。最终总结出对于自己的源码写作来说,需要改进的几点:

问题

1.示例代码太多

这可能是源码解析写作的通病吧。其实大多数人从vue和react这样框架的生命周期API就可以大致猜出内部流程是什么,示例代码太多反而会产生枯燥感,而且部分示例代码又长又臭,甚至不得不加上大段的注释,严重降低了阅读体验。

2.解析流水账

既然代码是给计算机看的流水账,那解析就不能再是给人看的流水账。对于源码解析来说,最大的误区是去弄懂每一行甚至每一个变量的意义,而这最终会导致事倍功半。所以源码解析应以高屋建瓴的意识去写作,而不是钻牛角尖,或者像和尚念经一样干干巴巴,逐字逐句地阐述。

3.缺乏提炼

我们初高中上语文课的时候,总会被问到这篇文章的中心思想是什么。同样,写完源码解析和读完源码解析,作者和读者收获了什么?很多源码解析文章并没有告诉我们,读者读完好像明白了点什么又好像没明白,一脸茫然。

针对以上三个问题,结合已有的《React源码解析》系列,我做出了如下改进:

改进

1.减少示例代码,尽可能使用语言概括和图形表达

人对图形的接受和理解度远远高于对语言的处理和理解,这也是为什么《图解HTTP》等系列书籍畅销全世界的原因。新的《React源码解析》去掉了许多无用代码和语言描述,改为使用思维导图或流程图,提升阅读体验,降低理解难度。当然,对于源码中重要的段落依然需要展示。

2.美化文章排版

在进行必要的代码示例时,如果代码较长,那么无论使用掘金编辑器还是代码截图,最后实际的阅读体验并不好,尤其在手机上时这一点更为明显。新的《React源码解析》将采用carbon展示代码。

3.思想提炼

阅读源码的最终作用并不是为了再造一个vue/react,而是借鉴其中的思想和方法,应用到实际业务中去,最终提升我们编程的能力。新的《React源码解析》将在每一篇文章的结尾阐述是什么和为什么,使读者读完有所收获,不会似懂非懂甚至白白浪费宝贵的时间。

3.总结

新的《React源码解析》依旧分为四篇,分别阐述React中重要的概念,目录如下:

  • 《React源码解析(一):组件的实现与挂载》
  • 《React源码解析(二):组件的类型与生命周期》
  • 《React源码解析(三):详解事务与队列》
  • 《React源码解析(四):事件系统》

思维导图如下图(在mac下查看效果最好):


四篇文章对导图的每个部分都做了详细的说明。如有欠妥之处,欢迎读者朋友们不吝指正和讨论,共同学习进步。

联系邮箱:ssssyoki@foxmail.com

《React源码解析》系列完结!相关推荐

  1. Redux 源码解析系列(一) -- Redux的实现思想

    文章来源: IMweb前端社区 黄qiong(imweb.io) IMweb团队正在招聘啦,简历发至jayccchen@tencent.com Redux 其实是用来帮我们管理状态的一个框架,它暴露给 ...

  2. # React源码解析之fiber的初次渲染与更新(下)

    React源码解析之fiber的初次渲染与更新(下) 经历一个月的学习整理,站在前人的肩膀上,对React有了一些浅薄的理解,希望记录自己的学习过程的同时也可以给大家带来一点小帮助.如果此系列文章对您 ...

  3. TiKV 源码解析系列文章(二)raft-rs proposal 示例情景分析

    作者:屈鹏 本文为 TiKV 源码解析系列的第二篇,按照计划首先将为大家介绍 TiKV 依赖的周边库 raft-rs .raft-rs 是 Raft 算法的 Rust 语言实现.Raft 是分布式领域 ...

  4. Tomcat源码解析系列二:Tomcat总体架构

    Tomcat即是一个HTTP服务器,也是一个servlet容器,主要目的就是包装servlet,并对请求响应相应的servlet,纯servlet的web应用似乎很好理解Tomcat是如何装载serv ...

  5. prometheus变量_TiKV 源码解析系列文章(四)Prometheus(下)

    本文为 TiKV 源码解析系列的第四篇,接上篇继续为大家介绍 rust-prometheus.上篇主要介绍了基础知识以及最基本的几个指标的内部工作机制,本篇会进一步介绍更多高级功能的实现原理. 与上篇 ...

  6. TiKV 源码解析系列 - Raft 的优化

    这篇文章转载TiDB大牛 唐刘 的博客:https://mp.weixin.qq.com/s?__biz=MzI3NDIxNTQyOQ==&mid=2247484544&idx=1&a ...

  7. Netty 源码解析系列-服务端启动流程解析

    netty源码解析系列 Netty 源码解析系列-服务端启动流程解析 Netty 源码解析系列-客户端连接接入及读I/O解析 五分钟就能看懂pipeline模型 -Netty 源码解析 1.服务端启动 ...

  8. Mybatis3 源码解析系列

    简介 Mybatis作为一个优秀的Java持久化框架,在我们的日常工作中相信都会用到,本次源码解析系列,就开始探索下Mybatis 总结 在MyBatis的学习中,首先通读了<MyBatis3源 ...

  9. 人人都能读懂的react源码解析(大厂高薪必备)

    人人都能读懂的react源码解析(大厂高薪必备) 1.开篇(听说你还在艰难的啃react源码) ​ 本教程目标是打造一门严谨(严格遵循react17核心思想).通俗易懂(提供大量流程图解,结合demo ...

最新文章

  1. 修改某个appointment已经存在的opportunity relation
  2. javafx 调用java_Java“地铁”表(JavaFX)
  3. linux mysql 5.6.23_mysql 5.6.23 的安装
  4. 【Java】如何较好地将int转化成String
  5. JumpServer1.5.8堡垒机专题课--prometheus监控主机和MySQL
  6. 数仓、数据平台和中台还分不清楚?大佬的10年经验之谈,看完懂了
  7. html5 音乐转盘,HTML5 幸运大转盘
  8. 一个中文字符占几个字节_字节与字符的关系
  9. CSDN在2017年度的若干“升级”
  10. 简单的五子棋游戏(C语言)
  11. 安卓一个奇怪的LOG:ColorDrawable.setColor
  12. 数学建模——数据分析方法
  13. 全国计算机二级C语言考试难不难?应该怎么备考?
  14. Java多线程面试知识点汇总(超详细总结)
  15. 解决phpstudy的Apache启动失败
  16. MySQL高级篇知识点——锁
  17. 如何修改DOSBOX的窗口大小
  18. 微信小程序中navigator没有反应
  19. (转)对话云象CEO黄步添:区块链未来两到三年不会爆发
  20. B. Fridge Lockers

热门文章

  1. Java集合(2)--Collection接口方法
  2. linux权限体系有哪些角色,详解Linux下系统权限
  3. 【强化学习】可视化学习tensorboard
  4. 【强化学习】AC注释版本
  5. C++一天一个程序(七)
  6. debian php mysql 安装_在 Debian 下安装 Apache,MySQL,PHP
  7. 在建工地扬尘在线监控系统推荐_配电室为何需要安装蓄电池在线监控系统?保定钰鑫电气...
  8. java list 去重复元素_java List去掉重复元素的几种方式
  9. mysql concat的使用
  10. Leetcode: Median of Two Sorted Arrays