当前位置: 首页 > Web前端 > HTML5

Luy1.0:类React轮子的诞生

时间:2023-04-04 23:03:20 HTML5

前言在过去的一个多月里,为了更深入的学习,使用React,了解React的内部算法和数据结构,以及我自己,写了一个来自的玩具划痕框架。到今天终于可以出第一个版本了,因为就在昨天,跑完了之前的一个小项目。预览地址:动态简历luy版仓库地址:喜欢就给个star吧~框架地址:Luy真的是白手起家吗?其实不是,我没有重新发明jsx解析器,我是用官方的解析器帮我解析jsx的。当我正式开始写Luy时,我非常盲目和恐惧。原因如下。虽然我们都知道React是基于虚拟DOM进行渲染的,但是虚拟DOM到底是什么?它是如何工作的React的setState是异步的,这一点我们都知道。但是他的异步和setTimeOut一样吗?内部是用setTimeOut实现的吗?React的事件合成系统。在React官方中,几万行代码中几乎有40%用于模拟事件。这部分是如何实现的?你为什么这么做?为什么React列表中的key如此重要?虚拟DOM的优化策略是什么?带着这些疑问,我要么看源码,要么找文章,但要真正理解这些知识,可能还得自己实践一下,才能安心。制作这个玩具框架有很多问题吗?虽然现在有很多类React框架,每个人都想做自己的迷你解决方案,但要创建一个类React框架还是超级难的。可想而知,FB工程师一开始是没有React的,如何制作React,天才。源码分析不多,也不完整:很多号称分析React源码的文章,其实只是很浅薄的阅读。基本套路是,看到代码的地方,网帖变成文章,很多知识点还是要打断亲自调试才能知道React正式版。好文章往往只关注一两点,知识点需要慢慢拼凑:网上有很多好文章,但好文章不能面面俱到。比如有人研究setState,有人研究生命周期函数,有人也研究ref,甚至有人研究Vdom。这些知识点比较分散,很难拼凑起来。基本上理解一个知识点需要一两天的时间。虚拟dom算法:说实话,虚拟DOM的算法并不难,就是树的递归遍历,边创建边遍历比较。但令人惊奇的是,市面上出现了一堆虚拟DOM产品。虽然大体相同,但有些地方还是不一样的,后面会讲到。榜单重点:虚拟DOM算法中最难的部分。对应的实际场景如下:

....这部分的难点在于“更新》其实这也是每个虚拟DOM最不同的地方。为什么inferno.js这么快?在这个答案中,实际上给出了答案。Luy使用的算法是:vue2源码学习开胃菜,从速度上来说是非常快的。当然,我并不是吹嘘自己的框架有多牛逼,而是很高兴实现了这个算法。这部分是给想学习React源码的朋友的第一,阅读React代码是最直接的解决办法,但是由于react源码太多,我们不得不另辟蹊径。阅读原版react代码有两种方式(很老。。。我选择了第二种方式阅读市面上比较成熟的react-mini框架的代码,可能有人会说哎呀,你的水平是不够,我承认,我的水平确实不行,看react源码dock有点蛋疼,我的方法是先做东西,然后有一个基本的思路,再看react源码就可以了知道它在做什么。一定要注意:框架中的任何一行代码都是为了解决一个或多个问题而存在的。当你无法将这些问题与脑海中的代码联系起来时,你只是在看书。所以,选择一个码少先看,了解react的套路。@周场正美的anujs:一个神奇的迷你react解决方案,支持IE6。代码通俗易懂,精巧,框架如其招牌:javascript魔术师.如果你看过anujs的朋友,你一定也会发现Luy中的部分代码和anujs非常相似。是的,我直接复制了很多代码,因为@周场正美的代码写的真的很好。RubyLouvre/anu是世界上最接近React官方的产品。Inferno.js:另一个知名的reactlite框架,Vdom速度最快,一系列优化方案值得学习。developit/preact:著名的preact以速度快、体积小着称。gzip只有3k,但是官方对react的支持其实很差。更搞笑的是,当你支持reactwheel,使用compact函数时,性能会大幅下降!(哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈)@胡子大HA:他写的React.js这本书很好,让我了解了构建React最基本的知识。40行代码实现一个React.js:@胡子大哈实现的snabbdom/snabbdom:其实就是vue的vdom。Preact源码学习(一)——个人文章——SegmentFaultpreact源码学习(二)——个人文章——SegmentFaultpreact源码学习(三)——个人文章——SegmentFaultpreact源码学习(四)——个人文章——SegmentFault:这些作者文章是@周TU正美,综合分析和官方对比。牛x到了极点。BuildYourownReact.jsGitBook:一篇国外的文章,看完基本可以创建一个可以setState的ReactBuildYourOwnReact:第一张效果图:这篇文章也很重要,介绍几种react组件模式@程序墨Morgan:《深入浅出react和redux》是一本很扎实的书,推荐过很多次了。对我理解react和redux很有帮助。当然,还有很多知识点是通过谷歌得来的,一切来之不易。在阅读源码的过程中,痛并快乐着。这个框架有前途吗?其实这个项目最初的想法只是为了学习react的内部原理,但是一路走来,我的想法也发生了变化。我会尽我所能维护它并跟进react官方的变化(说实话,createPortalLuy也支持它。!)毕竟学习其实就是模仿,创造总是在模仿的前提下进行的。最近公司在筹备一个新的小项目,这也是我第一个全面负责的项目,所以我决定用我的Luy来做个试点(好在Luy换成React其实是无痛的,所以什么是问题?,直接切换到react,哈哈哈最后的代码在这里,框架地址:Luy,目前总共只有1100+行,不多,可以当做“react套路学习版”