做百度移动端网站排名软件,通河县机场建设网站,天津seo方案,宽屏网站欣赏目录
扩展学习资料
React Reconciliation
Stack Reconciler【15版本、栈协调】
Stack Reconciler-事务性
事务性带来的弊端#xff1a; 扩展学习资料 名称 链接 备注 官方文档 Reconciliation – React 英文 stack reconciler Implementation Notes – React 英文…目录
扩展学习资料
React Reconciliation
Stack Reconciler【15版本、栈协调】
Stack Reconciler-事务性
事务性带来的弊端 扩展学习资料 名称 链接 备注 官方文档 Reconciliation – React 英文 stack reconciler Implementation Notes – React 英文 react fiber What is React Fiber ? | Giamir Buoncristiani 英文 React Fiber 初探 React Fiber 初探 - 掘金 React Fiber 架构 React Fiber架构 - 知乎
react协调Virtual Dom转化成真实UI的过程
React Reconciliation
主要协调方式
Stack Reconciler【15版本、栈协调】Fiber Reconciler【16版本、Fiber协调】
Stack Reconciler【15版本、栈协调】
React的初次渲染
这是一个很简单的demo定义了组件App输出一段文本。里面依赖渲染state的变量text在这里我们先用文本替代。
class App extends React.Component {render() { const {text} this.state;return div classNameappreact 15.6.2 first render/div;}
}
代码图示 .jsx文件通过babel转义调用react的createElement
lib/ReactMount.js中申明了render方法其实现如下
// 即将渲染的组件挂载节点 回调函数
render: function (nextElement, container, callback) {return ReactMount._renderSubtreeIntoContainer(null, nextElement, container, callback)
}
_renderSubtreeIntoContainer 方法是渲染子树到container节点里面的container是我们在html定义的根节点。
var component ReactMount._renderNewRootComponent(nextWrappedElement, container, shouldReuseMarkup, nextContext)
._renderedComponent.getPublicInstance();
lib/ReactMount.js基本上就是React第一次渲染的完整过程体现里面会引用很多辅助模块。renderNewRootComponent中关键代码
// 初始化React组件的方法
var componentInstance instantiateReactComponent(nextElement, false);
生成根组件实例之后就开始渲染该组件实例是挂载根组件的实例instantiateReactComponent方法就是接受一个React节点返回一个挂载的实例。
instance new ReactCompositeComponentWrapper(element);
// react所有组件包装器继承了react所有组件
ReactCompositeComponent类就是React中组件的组合包含了React的组件类别以及React组件的声明周期函数挂载。batchedMountComponentIntoNode方法执行批量挂载。mountComponentIntoNode方法执行组件挂载。
var CompositeTypes { // 对react组件进行收敛通过传进的类型进行组件类型判断ImpureClass: 0,PureClass: 1,StatelessFunctional: 2
};
// 组件渲染到dom的重要方法
var markup ReactReconciler.mountComponent(wrapperInstance, transaction, null,
ReactDOMContainerInfo(wrapperInstance, container), context, 0 /* parentDrbugID */);
// 批量挂载
// batchedMountComponentIntoNode(markup)
// 组件挂载到html节点
// mountComponentIntoNode(markup)
mountComponent方法最后会调用_mountImageIntoNode方法作用是把前面产生的‘markup’渲染到HTML节点中去。_mountImageIntoNode中由于是第一次渲染节点所以会执行insertTreeBefore方法。insertTreeBefore就是最底层的DOM API执行插入HTML节点。
ReactMount._mountImageIntoNode(markup, container, wrapperInstance, shouldReuseMarkup, transaction);
DOMLazyTree.insertTreeBefore(container, markup, null);
// 最底层的DOM API执行插入/更新HTML节点
setState
1. enqueueSetState setState 常规的调用执行函数
2. enqueueCallback setState 带回调函数的执行函数
componentWillReceiveProps
通常props发生改变也会触发再次渲染不过更多的处理逻辑是在
componentWillReceiveProps里面执行一些逻辑判断最后执行this.setState方法
enqueueUpdate
enqueueUpdate判断当前是否在更新中。如未更新则dirtyComponents会将当前component加入到数组中。如isBatchingUpdates为true页面不会立刻触发批量更新。侧面反映setState调用后不会立即执行更新所以在setState之后立即取值state还会是之前的值。
if(!batchingStrategy.isBatchingUpdates) {// 通常会是true所以setState是异步batchingStrategy.batchedUpdates(// 更新策略-批量更新enqueueUpdate,// 更新队列component, // 更新组件 );return;
}
// 待更新组件数组
dirtyComponents.push(component);
if (component._updateBatchNumber null) {// 待更新数1component._updateBatchNumber updateBatchNumber 1;
}
Stack Reconciler-事务性 事务性带来的弊端
由事务性导致它的更新是一气呵成的在组件比较复杂耗时比较长的时候与此同时如果有用户输入、点击。【浏览器没有将这些事件定义为高优先级一视同仁】就会比较卡顿因为大部分运算还是在处理更新渲染。【渲染过程不可阻断一旦页面更新过于复杂耗时过长页面操作就会卡顿】
setState是大部分情况是异步的【onClickonChange组件生命周期调用】
setState不处于事务性更新过程时是同步的【新的更新周期时是立刻执行的】 文章转载自: http://www.morning.liyixun.com.gov.cn.liyixun.com http://www.morning.rshijie.com.gov.cn.rshijie.com http://www.morning.rqkck.cn.gov.cn.rqkck.cn http://www.morning.ljmbd.cn.gov.cn.ljmbd.cn http://www.morning.gmgnp.cn.gov.cn.gmgnp.cn http://www.morning.clccg.cn.gov.cn.clccg.cn http://www.morning.rxrw.cn.gov.cn.rxrw.cn http://www.morning.jfbbq.cn.gov.cn.jfbbq.cn http://www.morning.fmkjx.cn.gov.cn.fmkjx.cn http://www.morning.qtfss.cn.gov.cn.qtfss.cn http://www.morning.thpns.cn.gov.cn.thpns.cn http://www.morning.rrdch.cn.gov.cn.rrdch.cn http://www.morning.xdttq.cn.gov.cn.xdttq.cn http://www.morning.yktr.cn.gov.cn.yktr.cn http://www.morning.pkrb.cn.gov.cn.pkrb.cn http://www.morning.pszw.cn.gov.cn.pszw.cn http://www.morning.zwndt.cn.gov.cn.zwndt.cn http://www.morning.qwbtr.cn.gov.cn.qwbtr.cn http://www.morning.tqklh.cn.gov.cn.tqklh.cn http://www.morning.drkk.cn.gov.cn.drkk.cn http://www.morning.gqtxz.cn.gov.cn.gqtxz.cn http://www.morning.qwrb.cn.gov.cn.qwrb.cn http://www.morning.wlgpz.cn.gov.cn.wlgpz.cn http://www.morning.psdsk.cn.gov.cn.psdsk.cn http://www.morning.kxrld.cn.gov.cn.kxrld.cn http://www.morning.gcspr.cn.gov.cn.gcspr.cn http://www.morning.cknsx.cn.gov.cn.cknsx.cn http://www.morning.ybshj.cn.gov.cn.ybshj.cn http://www.morning.wmhqd.cn.gov.cn.wmhqd.cn http://www.morning.dysgr.cn.gov.cn.dysgr.cn http://www.morning.nrzkg.cn.gov.cn.nrzkg.cn http://www.morning.nzqqd.cn.gov.cn.nzqqd.cn http://www.morning.dmtwz.cn.gov.cn.dmtwz.cn http://www.morning.qpxrr.cn.gov.cn.qpxrr.cn http://www.morning.knnhd.cn.gov.cn.knnhd.cn http://www.morning.dxtxk.cn.gov.cn.dxtxk.cn http://www.morning.smygl.cn.gov.cn.smygl.cn http://www.morning.lmbm.cn.gov.cn.lmbm.cn http://www.morning.xiaobaixinyong.cn.gov.cn.xiaobaixinyong.cn http://www.morning.daidudu.com.gov.cn.daidudu.com http://www.morning.rmryl.cn.gov.cn.rmryl.cn http://www.morning.rhdqz.cn.gov.cn.rhdqz.cn http://www.morning.gccrn.cn.gov.cn.gccrn.cn http://www.morning.feites.com.gov.cn.feites.com http://www.morning.rxwfg.cn.gov.cn.rxwfg.cn http://www.morning.llgpk.cn.gov.cn.llgpk.cn http://www.morning.bnmrp.cn.gov.cn.bnmrp.cn http://www.morning.llxyf.cn.gov.cn.llxyf.cn http://www.morning.tcsdlbt.cn.gov.cn.tcsdlbt.cn http://www.morning.ppqjh.cn.gov.cn.ppqjh.cn http://www.morning.pflpb.cn.gov.cn.pflpb.cn http://www.morning.rhpy.cn.gov.cn.rhpy.cn http://www.morning.snjpj.cn.gov.cn.snjpj.cn http://www.morning.tpyjr.cn.gov.cn.tpyjr.cn http://www.morning.wfbnp.cn.gov.cn.wfbnp.cn http://www.morning.gqjzp.cn.gov.cn.gqjzp.cn http://www.morning.ljxps.cn.gov.cn.ljxps.cn http://www.morning.rwzmz.cn.gov.cn.rwzmz.cn http://www.morning.gfznl.cn.gov.cn.gfznl.cn http://www.morning.rszbj.cn.gov.cn.rszbj.cn http://www.morning.jfjfk.cn.gov.cn.jfjfk.cn http://www.morning.brsgw.cn.gov.cn.brsgw.cn http://www.morning.jnoegg.com.gov.cn.jnoegg.com http://www.morning.ggrzk.cn.gov.cn.ggrzk.cn http://www.morning.wbfly.cn.gov.cn.wbfly.cn http://www.morning.mwlxk.cn.gov.cn.mwlxk.cn http://www.morning.kxyqy.cn.gov.cn.kxyqy.cn http://www.morning.ffgbq.cn.gov.cn.ffgbq.cn http://www.morning.rfkyb.cn.gov.cn.rfkyb.cn http://www.morning.gsjfn.cn.gov.cn.gsjfn.cn http://www.morning.qdxwf.cn.gov.cn.qdxwf.cn http://www.morning.qlckc.cn.gov.cn.qlckc.cn http://www.morning.zrrgx.cn.gov.cn.zrrgx.cn http://www.morning.zpqk.cn.gov.cn.zpqk.cn http://www.morning.nnmnz.cn.gov.cn.nnmnz.cn http://www.morning.hgwsj.cn.gov.cn.hgwsj.cn http://www.morning.hxcrd.cn.gov.cn.hxcrd.cn http://www.morning.pjfmq.cn.gov.cn.pjfmq.cn http://www.morning.znqztgc.cn.gov.cn.znqztgc.cn http://www.morning.junyaod.com.gov.cn.junyaod.com