zoukankan      html  css  js  c++  java
  • react 渲染原理

      总体概括:

    • JSX代码经过babel编译之后变成React.createElement的表达式,这个表达式在render函数被调用的时候执行生成一个element。
    • 在首次渲染的时候,先去按照规则初始化element,接着ReactComponentWrapper通过递归,最终调用ReactDOMComponent的mountComponent方法来帮助生成真实DOM节点。

      详细解说:

      

    一、JSX如何生成element

    这里是一段写在render里的jsx代码。

    return (
        <div className="cn">
             <Header> Hello, This is React </Header>
             <div>Start to learn right now!</div>
             Right Reserve.
        </div>
    )

    首先,它会经过babel编译成React.createElement的表达式。

    return (
        React.createElement(
            'div',
            { className: 'cn' },
            React.createElement(
                Header,
                null,
                'Hello, This is React'
            ),
            React.createElement(
                'div',
                null,
                'Start to learn right now!'
            ),
            'Right Reserve'
        )
    )

    这个React.createElement的表达式会在render函数被调用的时候执行,换句话说,当render函数被调用的时候,会返回一个element。二、element如何生成真实节点

    二、element如何生成真实节点

    顺利得到element之后,我们再来看看React是如何把element转化成真实DOM节点的。

    首先,需要去初始化element,初始化的规则如下:

    以第一条为例:先判断是否为Object类型,是的话,看它的type是否是原生DOM标签,是的话,给它创建ReactDOMComponent的实例对象,其他同理。

     

    这时候有的人可能会有所疑问:这些个ReactDOMComponent, ReactCompositeComponentWrapper怎么开发的时候都没有见过?

    其实这些都是React的私有类,React自己使用,不会暴露给用户的。它们的常用方法有:mountComponent,updateComponent等。其中mountComponent 用于创建组件,而updateComponent用于用户更新组件。

    而我们自定义组件的生命周期函数以及render函数都是在这些私有类的方法里被调用的。

  • 相关阅读:
    性能测试随笔,看看罢了,只做笑谈尔。
    谈性能指标测试
    协议初解
    LR手工制作接口类脚本
    一天学一个模式_第五天:门面模式
    Oracle日常操作小常识(持续更新)
    什么是“GB/T ”? 计算机术语你又知道多少? 想不想别人听不懂的语言搞定别人!
    Silverlight 4 Tools for VS 2010 发布倒计时
    微软一站式示例代码库 4 月小结
    微软一站式示例代码库 20100430 新增代码示例简介
  • 原文地址:https://www.cnblogs.com/nini123123/p/11193845.html
Copyright © 2011-2022 走看看