在过去的一个多月中,为了可以更深刻的学习,使用React,了解React内部算法,数据结构,我本身,从零开始写了一个玩具框架。javascript
截止今日,终于能够发布第一个版本,由于就在昨天,我跑通了以前的一个小项目。html
其实并非,我并无从新把jsx解析器进行造轮子,我用上了官方的解析器去帮助我解析jsx。vue
在正式开始写Luy的时候,仍是比较盲目和恐惧的,缘由以下java
setTimeOut
实现的?带着这些疑问,我要么是去读源码,要么去找文章,可是真正弄懂这些知识,可能还得动手本身实践一次我才会感到安心。react
虽说如今React-like的框架一大堆,你们都想作出本身的mini 化方案,可是制造一个React-like框架仍是超级困难的,可想而知,当初FB工程师们在没有React的状况下,是如何造出React的,天才。git
源码解析很少,并且不完备:不少号称解析React源码的文章其实只是很是浅层次的读一读,基本上的套路就是,看到哪里的代码,网上一帖就成了一篇文章了,不少知识点仍是得亲自去打断电调试React官方版本才能知道。github
好的文章每每只专研了一两个点,知识点须要慢慢拼凑:网上不乏好文章的,可是好的文章不可能面面俱到。好比有些人研究setState
,有些人研究生命周期函数,有些人还研究了ref,甚至有些人研究了Vdom。这些知识点很散乱,很是难以拼凑在一块儿,基本要花一两天才能搞懂一个知识点。算法
虚拟dom算法
:我说实话,虚拟DOM的算法其实并不难,也就是树的递归遍历,在遍历的同时建立和比对。可是奇妙的就是,市面上有一堆虚拟DOM产品,虽然大体相同,可是在处理某些地方的时候不同,后文会讲。列表的key
:虚拟DOM算法最难的地方。对应的实际场景就是以下:<ReactComponent> <div key='1'></div> <div key='2'></div> <div key='3'></div> <div key='4'></div> <div key='5'></div> <div key='6'></div> .... </ReactComponent>
这一个部分难就难在「更新」上,这也是每一款虚拟DOM最不同的地方。redux
为何inferno.js这么快?这个回答里,其实给出了答案。segmentfault
而Luy
使用的算法是:vue2源码学习开胃菜,速度上来讲很是不错。
固然我不是吹嘘本身的框架有多牛逼,只是实现了这个算法仍是很是开心的。
首先,阅读React代码是最直接的方案,可是由于react源码实在太多了,咱们必须另寻出路。有两个办法
我选择了第二种方式,可能会有人说哎呀,你水平不够。我认可,我水平确实不行,读react源码头有点痛。
个人方法就是先把东西作出来,而后有了基本思路,再看React源码你就知道它在干什么了。必定要注意的是:框架里任何一行代码都是为了解决某一个或者多个问题而存在的,当你脑海中不能将这些问题和代码联系在一块儿的时候,你他吗根本就是在读天书。因此,选择一个代码较少的先读着,理解react的套路。
固然,还有不少知识点是经过google获得的,一切来之不易。在读源码的过程当中,痛苦可是快乐。
这个项目其实最初的想法只是学习react的内部原理,可是一路走来个人想法也改变了,会尽本身最大的所能,维护下去,而且跟进react官方的变化(说实话createPortal Luy也是支持的!)
毕竟,学习其实就是模仿,创造永远在模仿的前提下。最近公司准备上一个新的小项目,也是我第一个全权负责的项目,因此我决定上一把个人Luy进行试点(好就好在,Luy更换react实际上是无痛的,实在有什么问题,直接换react上,哈哈哈
代码在这里,框架地址:Luy,总共加起来目前只有1100+行,很少,能够做为「react套路学习版本」