9 react 基础 - 虚拟DOM
一.虚拟DOM
React 原理
1. 存放 state 数据
2. JSX 模版
3. 数据 + 模版 生成虚拟DOM(虚拟DOM就是一个JS 对象, 用来描述真实DOM)
eg: ['div', {id:'abc'}, ['span', {}, 'hello world']]
4. 用虚拟DOM的结构生成真实的DOM, 来显示
eg: <div id='abc'><span>hello word</span></div>
5. state 发生变化
eg: <div id='abc'><span>bye bye</span></div>
6. 数据 + 模版 结合生成 虚拟DOM(虚拟DOM就是一个JS 对象, 用来描述真实DOM)
eg: ['div', {id:'abc'}, ['span', {}, 'bye bye']]
7. 比较原始虚拟DOM 和 新的虚拟DOM 的区别, 找到区别的span内容
8. 直接操作DOM, 改变 span 中的内容
二. 深入了解虚拟DOM
render 方法内
返回 JSX 语法 与 返回 React.createElement() 方法所生成的效果是一样的
eg: 下面两种产生的效果相同
JSX:
return <div><span>div span</span></div>
React.createElement:
return React.createElement('div', {}, React.createElement('span', {}, 'div span'))
虚拟DOM 可以理解为
将 JSX 转化为 createElement 对象 再转化为 虚拟DOM(js 对象) 再转化为 真实的DOM
虚拟DOM 带来的好处
1.性能提升 (DOM 比对 编程 js 比对)
2.他使得跨端应用得以实现 (React Native, 再网页中 将虚拟 DOM 转化为组件,再App中将 虚拟DOM 转化为 app 组件, 使得 React 开发变得简介)
三. 虚拟DOM 中的 Diff (diffrence) 算法 (虚拟 DOM 的 比对方式)
调用 setState 时 会运行 Diff 算法
同级比较
先比较顶层 DOM
如果 顶层有差异 (替换全部的DOM)
使用 稳定的 key 值 做 标记 便于 虚拟DOM 比对
9 react 基础 - 虚拟DOM的更多相关文章
- React的虚拟DOM
ReactJs的一大特点就是引进了虚拟dom(Virtual DOM)的概念.为什么我们需要Virtual DOM,Virtual DOM给我们带来了什么优势. 首先我们要了解一下浏览器的工作流. 当 ...
- 【React自制全家桶】二、分析React的虚拟DOM和Diff算法
一.React如何更新DOM内容: 1. 获取state 数据 2. 获取JSX模版 3. 通过数据 +模版结合,生成真实的DOM, 来显示,以下行代码为例(简称代码1) <div id= ...
- react 的虚拟dom
前端优化的主要方面就是减少页面的DOM操作,减少重排和重绘,React在这方面做了优化,采用了所谓的虚拟DOM,其实我们平时也会遇到虚拟DOM,只是你没有注意罢了,请听我娓娓道来. 所谓的虚拟DOM ...
- React:关于虚拟DOM(Virtual DOM)
Virtual DOM 是一个模拟 DOM 树的 JavaScript 对象. React 使用 Virtual DOM 来渲染 UI,当组件状态 state 有更改的时候,React 会自动调用组件 ...
- JavaScript是如何工作的:编写自己的Web开发框架 + React及其虚拟DOM原理
这是专门探索 JavaScript 及其所构建的组件的系列文章的第 19 篇. 如果你错过了前面的章节,可以在这里找到它们: JavaScript 是如何工作的:引擎,运行时和调用堆栈的概述! Jav ...
- 2.ReactJS基础(虚拟DOM,JSX语法)
将脚手架(create-react-app)创建的todolist项目精简为hello world示例 即,删除自动生成的样式文件.logo.svt.App.test.js.serviceWorker ...
- react中虚拟dom的diff算法
.state 数据 .jsx模板 .生成虚拟dom(虚拟DOM就是一个js对象,用它来描述真实DOM) ['div', {id:'abc'}, ['span', {}, 'hello world']] ...
- react中虚拟DOM的基本概念
react中的核心概念 1.DOM的本质是什么: 浏览器中的概念,用js对象来表示页面上的元素,并提供操作DOM对象的API 2.什么事react中的虚拟DOM:是框架中的概念,是程序员用js对象来模 ...
- React virtual DOM explained in simple English/简单语言解释React的虚拟DOM
初学React,其中一个很重要的概念是虚拟DOM,看了一篇文章,顺带翻译一下. If you are using React or learning React, you must have hear ...
随机推荐
- mysql导入导出无权限
error:The MySQL server is running with the --secure-file-priv option so it cannot execute this state ...
- Eclipse 不能调试的问题
现象 弹出 Cannot connect to VM Console 中的输出是: ERROR: transport error 202: connect failed: Connection ref ...
- Win10下数据增强及标注工具安装
Win10下数据增强及标注工具安装 一. 数据增强利器—Augmentor 1.安装 只需在控制台输入:pip install Augmentor 2.简介 Augmentor是用于图像增强的软件 ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-eject
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- 重装系统,新安装IDEA启动项目后,classnotfound:com.mysql.jdbc.Driver
我最后解决是:这个Test connection会自动帮你下载的,但是如果中途一直叫你try again,甚至到后面点这个test connection有弹窗,但是单窗里面的选项你点击后没反应,我是直 ...
- CGridCtrl只点击规定行中的按钮才弹出对话框
在头文件中添加: afx_msg void OnClick(NMHDR* pNMHDR, LRESULT* pResult); 添加映射:ON_NOTIFY(NM_CLICK, IDC_CUSTOM1 ...
- ubuntu下pip的安装、升级和使用
系统虽然自带了不同版本的python,但都没有安装pip,pyhton2.7下使用的是pip2,python3.5下使用的是pip3.下面是各自安装命令. 安装 pip2: sudo apt-get ...
- [洛谷Luogu]P1803 线段覆盖问题
贪心想法题解的各位dalaodalaodalao都讲得很清楚了,在下就提供一种桶排的做法吧. 因为给出数据范围 0≤ai<bi≤10000000≤ai<bi≤10000000≤ai< ...
- 用25行JavaScript语句实现一个简单的编译器
原文:https://www.iteye.com/news/32680 译者注:即使对于专业程序员来说,构造一个编译器也是颇具挑战性的任务,本文将会引导你抽丝剥茧,一探究竟! 我已经写了几篇与编程语言 ...
- 159-PHP strstr函数,取最后几个字符和除去最后几个字符
<?php $str='programming'; //定义一个字符串 $res=substr($str,-4); //处理字符串 echo "返回{$str}字符串的最后4个字符{$ ...