美文网首页
redux高阶运用

redux高阶运用

作者: 星月西 | 来源:发表于2017-08-26 14:19 被阅读24次

1. diff算法

React组件的核心思想是:

  • 将页面拆分为一个个组件,一个组件还可能嵌套更小的组件,每个组件都有自己的数据,当某个组件的数据发生变化时,更新该组件的部分视图。
  • 更新的过程是由数据驱动的,新的数据自该组件顶层向下流向子组件,每个组件调用自己的render方法得到新的视图,并与之前的视图diff比较差异,完成更新,这个过程就是reconciliation-调和

虚拟DOM基本原理:
用纯js对象来模拟DOM树,每当更新时,根据组件的render方法计算出新的虚拟DOM树,并与之前的虚拟DOM树作比较,得到一个差异补丁,最后隐射到真正的DOM树上完成视图更新,以减少操作DOM的次数

diff算法:前端很少跨越层级移动DOM元素,只会对虚拟DOM中同一层级的元素进行比较,这样算法复杂度就可以达到O(n)

diff碰到列表会有问题
发现列表元素不同时,就会对其进行重渲染,但是可能只是进行了插入操作,只需要进行移动操作即可,需要定义key属性,diff时就会去查找是否有相同的key元素,比较它们是否完全相同,若是则会复用该元素,免去不必要的操作
不推荐使用数组的index作为key,因为如果数据重排,index并不能起到唯一标识的作用,每次视图元素都会重新渲染

diff会帮我们计算出虚拟DOM中真正变化的部分,并只针对该部分进行原生DOM操作,而非重新渲染整个页面,从而保证了每次操作更新后页面的高效渲染
传统diff算法循环递归对节点进行依次比较,算法复杂度为O(n3),React可以转化为O(n)复杂度

2.diff策略

diff算法的三个策略

  • DOM节点的跨层级的移动操作特别少,可以忽略不计
  • 拥有相同类的两个组件会生成相似的树形结构,拥有不同类的两个组件会生成不同的树形结构
  • 对于同一层级的一组子节点,它们可以通过唯一id进行区分

2.1 tree diff

对树进行分层比较,两棵树只会对同一层次的节点进行比较,即同一个父节点下的所有子节点,当发现节点已经不存在时,则该节点及其子节点会被完全删除掉,不会用于进一步的比较,这样只需要对树进行一次遍历

当出现节点跨层级移动时,并不会出现想象中的移动操作,而是移除不存在的节点及其子节点,创建存在的节点

注意:在开发组件时,保持稳定的DOM结构会有助于性能的提升,可以通过CSS隐藏或显示节点,而不是真正移除或添加DOM节点

2.2 component diff

组件间比较:

  • 同一类型组件,按照原策略继续比较虚拟DOM树
  • 将该组件判断为dirty component,替换整个组件下的所有子节点
  • 同一类型组件,可能虚拟DOM完全没有变化,用户通过shouldComponentUpdate来判断组件是否需要进行diff算法

即不同组件则,直接替换掉组件下的所有子节点

2.3 element diff

相关文章

  • redux高阶运用

    1. diff算法 React组件的核心思想是: 将页面拆分为一个个组件,一个组件还可能嵌套更小的组件,每个组件都...

  • React学习之Redux高阶运用

    在Redux架构中,reducer是一个纯函数,它的职责是根据previousState和action计算出新的s...

  • redux简介(二)源码解析

    写在开头 前置知识内容,闭包,高阶函数,函数式编程思想,redux核心概念。 redux文档:https://ww...

  • react 笔记

    react 基本概念解析 react 的组件声明周期 react 高阶组件,context, redux 等高级...

  • Redux笔记

    学习目的 了解和熟练使用 Redux,能够在实际项目中运用。 学习方法:类比 VueX Redux 比...

  • Redux 分析

    Redux的核心本质就是一个发布订阅模式。 Redux运用于React框架中,是一个全局状态管理器。Redux解决...

  • Provider高阶组件

    Provider provider是react-redux提供的一个高阶组件 使用Provider的简单步骤: 创...

  • react-redux之connect方法

    connect作用:连接React组件与 Redux store。connect是一个高阶函数(函数返回函数),它...

  • 前端面试题

    redux action、reducer的抽象特点和注意:纯函数,不能new date()或者随机数*高阶组件 c...

  • 深入理解React 高阶组件

    1. 基本概念 高阶组件是React 中一个很重要且较复杂的概念,高阶组件在很多第三方库(如Redux)中都被经常...

网友评论

      本文标题:redux高阶运用

      本文链接:https://www.haomeiwen.com/subject/xoepdxtx.html