React渲染

JSX如何生成element

    return(
<div className="box">
<div> header </div>
hello world
</div>
)

他会经过babel编译成React.createElement的表达式

return(
React.createElement(
'div',
{className:'box'},
React.createElement(
'div',
null,
'header'
),
'hello world'
)
)

createElement()是用来组成虚拟DOM树

createElement的三个参数

  1. type -> 标签

  2. attributes => 属性标签,没有的话,可以为null

  3. children => 标签的子节点

最后的element对象的值

{
type:'div',
props:{
className:'box',
children:[
{
type: "div",
props:{
children:"header"
}
},
"Hello world"
]
}
}

element如何生成真实节点

而其中的ReactDOMComponent等等,属于React的私有类,React自己使用 ,不会暴露给用户的

常用的有:mountComponent,updateConponent等,而我们自定义的生命周期函数以及render函数都是在私有类的方法里被调用

ReactDOMComponent 作用

ReactDOMComponent的mountComponent方法,这个方法的作用是:将element转成真实DOM节点,并且插入到相应的container里,然后返回markup(realDOM)

简单实现

{
type: 'div',
props: {
className: 'box',
children: 'Hello world',
}
} mountComponent(container) {
const domElement = document.createElement(this._currentElement.type);
const textNode = document.createTextNode(this._currentElement.props.children); domElement.appendChild(textNode);
container.appendChild(domElement);
return domElement;
}

ReactCompositeComponentWrapper 作用

这个类的mountComponent方法作用是:实例化自定义组件,最后是通过递归调用到ReactDOMComponentmountComponent方法来得到真实DOM。

渲染规则

react 渲染的更多相关文章

  1. React渲染问题研究以及Immutable的应用

    写在前面 这里主要介绍自己在React开发中的一些总结,关于react的渲染问题的一点研究. 另外本人一直希望在React项目中尝试使用,因此在之前已经介绍过immutable的API,可以参看这里I ...

  2. 你所要掌握的最简单基础的React渲染优化

    一.React的渲染机制 要掌握一两项React-render优化的方法不难,但是非常重要.无论是在实际项目中的一个小细节,还是迎合'面试官'的口味 1.1 触发Render 我们知道React要更新 ...

  3. react渲染原理深度解析

    https://mp.weixin.qq.com/s/aM-SkTsQrgruuf5wy3xVmQ   原文件地址 [第1392期]React从渲染原理到性能优化(二)-- 更新渲染 黄琼 前端早读课 ...

  4. react渲染和diff算法

    1.生成虚拟dom createElement的作用就是生成虚拟dom.虚拟dom到底是个啥,其实它就是个javascript对象~,这个对象的属性有props,vType,type, 而props也 ...

  5. 【React】393 深入了解React 渲染原理及性能优化

    如今的前端,框架横行,出去面试问到框架是常有的事. 我比较常用React, 这里就写了一篇 React 基础原理的内容, 面试基本上也就问这些, 分享给大家. React 是什么 React是一个专注 ...

  6. React渲染和事件处理

    一.列表渲染 ①在列表中,绑定数组成员会直接把成员渲染 <div id="app"></div> <script src="node_mod ...

  7. 从React渲染流程分析Diff算法

    1.什么是虚拟DOM 在React中,render执行的结果得到的并不是真正的DOM节点,结果仅仅是轻量级的JavaScript对象,我们称之为virtual DOM. 简单的说,其实所谓的virtu ...

  8. react 渲染顺序

    工作中要对一个表格做再次更新, 可能是渲染后更新或者部分组件渲染之后, 对页面效果做处理 之前对react的理解, 仅仅停留在render渲染. 这次好好理解了下react的生命周期 1 react组 ...

  9. 十六、React 渲染数据注意事项、以及react-router4.x中使用js跳转路由(登录成功自动跳转首页)

    一.React加载数据流程回顾 先看上一节的产品详情代码:https://blog.csdn.net/u010132177/article/details/103184176 [Pcontent.js ...

随机推荐

  1. Git 学习文档

    Study Document for Git Git 基础 Git 文件的三种状态: 已提交(committed).已修改(modified)和已暂存(staged). Git 工作目录的状态: 已跟 ...

  2. vue 注意

    Path Intellisense 插件 @路径提醒 配置文件中配置: "path-intellisense.mappings": { "@": "$ ...

  3. 根据ip列表模拟输出redis cluster的主从对应关系

    需求:给点一批ip列表,一个数组或者一个文件,每行一个ip,模拟输出redis cluster的组从关系,前者是master_ip:master_port -> slave_ip:slave_p ...

  4. 解决树莓派鼠标延迟/迟滞问题-转CSDN博主“Deiki”-sunziren

    本文转自CSDN: https://blog.csdn.net/deiki/article/details/73252942,因为我在为树莓派安装2.4G无线键鼠的时候,鼠标反应很慢,卡顿严重(换成有 ...

  5. [Linux] git add时的注意事项

    git add -A  提交所有变化 git add -u  提交被修改(modified)和被删除(deleted)文件,不包括新文件(new) git add .  提交新文件(new)和被修改( ...

  6. c#---out参数

    一个方法有多个返回值时,返回值类型相同可以返回一个数组 static void Main(string[] args) { , , , , , , , , , }; int[] result = Ge ...

  7. BLOB-数据库中用来存储二进制文件的字段类型

    BLOB (binary large object)----二进制大对象,是一个可以存储二进制文件的容器. 在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型. BLOB是一个大文件,典型 ...

  8. Windows下Anaconda安装、换源与更新

    Anaconda指的是一个开源的Python发行版本,其包含了conda.Python等180多个科学包及其依赖项.当你尝试pip install xxx时出现各种意外和依赖问题,那么conda就是一 ...

  9. Jenkins-Publish Over SSH插件

    插件安装 打开Jenkins的“系统管理>管理插件”,选择“可选插件”,在输入框中输入“Publish over SSH”进行搜索,如果搜索不到可以在“已安装”里确认是否已经安装过.在搜索结果中 ...

  10. 【Thread】java线程之对象锁、类锁、线程安全

    说明: 1.个人技术也不咋滴.也没在项目中写过线程,以下全是根据自己的理解写的.所以,仅供参考及希望指出不同的观点. 2.其实想把代码的github贴出来,但还是推荐在初学的您多亲自写一下,就没贴出来 ...