react学习(四)Element和虚拟DOM

参考:https://facebook.github.io/react/docs/rendering-elements.html

(一)Element

1.Element是react中最小的构建单元,是一个对象不是DOM,创建的代价比较低。

(1)通常我们在代码中使用JSX定义一个Element:

const element = <h1>Hello, world</h1>;

(2)使用ReactDOM.render来渲染

ReactDOM.render( element, document.getElementById(‘root‘) );

2.一旦一个Element被创建之后,是不可被改变的,它就像电影中的帧,如果要改变DOM的显示,只能新创建一个Element。

3.React会比较前后两个Element,只更新需要更新的内容。

(二)虚拟DOM

参考http://www.infoq.com/cn/articles/react-dom-diff

1.React并不是直接构建DOM元素的,而是通过创建与DOM结构类似的对象。然后根据这个结构,也就是React DOM来渲染真正的DOM。

2.当有改变的时候,新建对象,然后使之与之前的结构对比,记录下两者的差异,这里可以看下diff算法。

3.然后根据记录的差异更新DOM。

时间: 2024-12-29 23:11:37

react学习(四)Element和虚拟DOM的相关文章

React 学习(四) ---- 生命周期函数

现在我们能修改状态,页面可以进行交互了,但是还有一种状态改变没有解决,那就是倒计时效果,时间一直在变化,组件状态也一直在改变,但我们什么都没有做,如果要实现这样的效果,需要怎么处理? 我们都知道,改变状态用的是setState,  上次讲的加减操作是在把它写到事件处理函数中来改变状态的,但现在没有什么事件供我们调用,因为我们没有做任何操作,它却一直在变化,现在要做的就是找一个机会或入口,来写setState 函数, 这个机会就是组件的生命周期函数. 生命周期也是来源于对我们对现实生活的思考, 对

react学习(四)之设置 css样式 篇

react中设置css样式 方法一: 行内样式:使用{{  }},与正常jsx中插入js代码不一样,这里需要两个括号. <div style={ { float: 'right',} }> { this.renderButton() } </div> 样式比较多的话不建议使用该方法. 可以使用方法二 方法二: 在jsx文件中定义样式变量, let buttonStyle = { //定义style变量 backgroundColor: 'blue', float: 'left' a

vue----核心虚拟dom

一.真实DOM和其解析流程? 浏览器渲染引擎工作流程都差不多,大致分为5步,创建DOM树——创建StyleRules——创建Render树——布局Layout——绘制Painting 第一步,用HTML分析器,分析HTML元素,构建一颗DOM树(标记化和树构建). 第二步,用CSS分析器,分析CSS文件和元素上的inline样式,生成页面的样式表. 第三步,将DOM树和样式表,关联起来,构建一颗Render树(这一过程又称为Attachment).每个DOM节点都有attach方法,接受样式信息

什么是虚拟DOM?

(摘抄自一篇文章,觉得这里写得非常不错,所以单独放出来,希望能对大家有帮助.)React为啥这么大?因为它实现了一个虚拟DOM(Virtual DOM).虚拟DOM是干什么的?这就要从浏览器本身讲起 如我们所知,在浏览器渲染网页的过程中,加载到HTML文档后,会将文档解析并构建DOM树,然后将其与解析CSS生成的CSSOM树一起结合产生爱的结晶--RenderObject树,然后将RenderObject树渲染成页面(当然中间可能会有一些优化,比如RenderLayer树).这些过程都存在与渲染

虚拟DOM -------- 最易理解的解释

虚拟DOM是最先由Facebook在react里使用的, 虚拟DOM是一个特别棒的概念,我们都知道,在浏览器上进行DOM操作的时候,会特别的消耗性能而且响应.渲染特别慢,但是有了虚拟DOM就不一样了, 虚拟DOM就是将DOM树转换成一个JS对象树, 虚拟DOM就是将上述的标签写成一个js对象树,如下 当DOM改变的时候,他会使用Diff算法将改变以后的js对象树与原先的js对象树进行比较,这个比较是逐层比较的,当发现节点删除就删除,增加就增加, 但是由于他是一级一级进行比较的,这样就会有一个致命

React入门-JSX和虚拟dom

1.JSX理解 举例: const element = <h1>Hello, world!</h1>; 这被称为 JSX,是一个 JavaScript 的语法扩展.建议在 React 中配合使用 JSX,JSX 可以生成 React “元素”,而且JSX 可以很好地描述 UI 应该呈现出它应有交互的本质形式.JSX 可能会使人联想到模版语言,但它具有 JavaScript 的全部功能. 为什么用JSX? React 认为渲染逻辑本质上与其他 UI 逻辑内在耦合,比如,在 UI 中需

react特点和创建虚拟DOM

react:用于构建用户界面的JavaScript库 特点: 1.声明式(只需要更新数据,不需要操作DOM,页面就会变化) 2.组件化(页面简化,方便维护) 3.一次学习,随处编写(ReactNative,可以运用在手机上,包括安卓和ios,既可以写浏览器端也可以写服务器端) 4.高效(虚拟dom:不总是直接操作DOM 和 dom diff:最小化页面重绘) 5.单项数据流 注意:react高效的原因:  相关js库: react.js:React的核心库 react-dom.js:提供操作DO

React虚拟DOM浅析

转帖: http://www.alloyteam.com/2015/10/react-virtual-analysis-of-the-dom/?hmsr=toutiao.io&bsh_bid=928783684 在Web开发中,需要将数据的变化实时反映到UI上,这时就需要对DOM进行操作,但是复杂或频繁的DOM操作通常是性能瓶颈产生的原因,为此,React引入了虚拟DOM(Virtual DOM)的机制. 什么是虚拟DOM? 虚拟DOM VS 直接操作原生DOM? 虚拟DOM VS MVVM?

深入理解react中的虚拟DOM、diff算法

文章结构: React中的虚拟DOM是什么? 虚拟DOM的简单实现(diff算法) 虚拟DOM的内部工作原理 React中的虚拟DOM与Vue中的虚拟DOM比较 React中的虚拟DOM是什么?   虽然React中的虚拟DOM很好用,但是这是一个无心插柳的结果.   React的核心思想:一个Component拯救世界,忘掉烦恼,从此不再操心界面. 1. Virtual Dom快,有两个前提 1.1 Javascript很快  Chrome刚出来的时候,在Chrome里跑Javascript非