React源码理解

渲染阶段   

React中的jsx文件,babel会将jsx转化成js。

假设在React中render一个<div>,在相应的js中会有一个React.createElement的方法,接受component、props... children的参数,还有ref、key等属性,使用js构建出一个虚拟dom。

虚拟dom:在js中构造出dom,用js对dom进行增删改,最后将修改的部分应用到真实dom中。

构造出虚拟的dom后,调用instantiateReactComponent的方法,这个方法会根据传入的vdom的类型,3种类型,1.string\value类型 2.原生的类型例如div 3.自定义类型

构建出相应的dom后,调用mountComponent方法,最终将产生的添加到相应的节点中。

createInstanceForText();
ReactCompositeComponentWrapper是一个工厂类

觉得写的比较清晰的一篇文章: https://www.jianshu.com/p/2a6fe61d918c

 

setState之后阶段

1.通过ReactInstanceMap方法获得相应渲染对象。

2.对渲染对象的_pendingStateQueue操作,将需要更新的状态push进去。

3.检查是否处于一个批量更新的状态,若处于批量更新状态,则将该渲染对象放入dirtyComponent中。若不处于,则调用ReactDefaultBatchingStrategyTransaction开启一个新的事物,进行vdom的比较。

4.internalInstance.updateComponent(partialState);

可参考链接:https://github.com/sixwinds/blog/issues/10

 

转载于:https://www.cnblogs.com/bounceFront/p/8616755.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值