博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
react中的核心概念
阅读量:6323 次
发布时间:2019-06-22

本文共 809 字,大约阅读时间需要 2 分钟。

DOM:浏览器中提供的概念;

虚拟DOM:框架中的概念;需要开发框架的程序员手动用JS对象来模拟DOM元素和嵌套关系;

  • 本质:用JS对象,模拟DOM树;
  • 目的:实现页面的按需更新;

要求:点击列头,实现按需排序;

1. 数据从哪儿来:从数据库查询而来

2. 数据存放在哪:浏览器内存中以对象数组形式表示

3. 如何渲染到页面:

  • 方案1:手动for循环整个数组。str+='<tr></tr>'
  • 方案2: 使用模板引擎。atr-template;(与方案1没有本质的区别,只是方便)

上述方案,存在性能上的缺陷:每次排序后,都需要重新渲染整个页面(包括没有发生变化的行)。

虚拟DOM

如何实现按需更新?

获取内存中的新旧两棵DOM树进行对比,得到需要被按需更新的DOM树

如何获取新旧DOM树?

分析:浏览器中没有提供直接获取DOM树的API;

方法:我们可以手动模拟新旧DOM树

如何模拟DOM树?

用JS对象,通过children嵌套DOM元素,构成DOM树

  • item
var ul={  tagName:'ul',  attrs:{     id:'list'   },   children:[     {
tagName:'li', attrs:{
class:'item' }, children:['item'] } ] }

diff算法

  • tree diff:新旧DOM树,逐层对比的过程
  • component diff:进行tree diff时,每一层中,组件级别的对比
  • element diff:进行组件对比时,如果两个组件类型相同,则继续进行元素对比

 

转载于:https://www.cnblogs.com/embrace-ly/p/10605535.html

你可能感兴趣的文章
HDOJ 2088
查看>>
Linux pipe函数
查看>>
springMVC 前后台日期格式传值解决方式之二(共二) @InitBinder的使用
查看>>
springMVC配置静态资源访问的<mvc:resources>标签的使用
查看>>
Android APP安装后不在桌面显示图标的应用场景
查看>>
Ural 1183 Brackets Sequence(区间DP+记忆化搜索)
查看>>
内部类的继承
查看>>
理解 python metaclass使用技巧与应用场景分析
查看>>
怎么面试架构师
查看>>
oracle系统包——dbms_random用法及order by 小结(转)
查看>>
SQL Server性能调优——报表数据库与业务数据库分离
查看>>
Rsync启动停止脚本
查看>>
MySQL5.6的my.ini配置
查看>>
ux.plugin.ConTpl 模版元素监听扩展
查看>>
【转】使用sklearn做单机特征工程
查看>>
springmvc+mybatis+redis(转)
查看>>
ibatis配置xml文件中CDATA的用法
查看>>
【转】2012年7月9 – 知名网页游戏公司 PHP高级工程师 最新面试题
查看>>
purge
查看>>
数据库的增加与更新合并
查看>>