美文网首页
Virtual DOM

Virtual DOM

作者: bestCindy | 来源:发表于2022-05-30 16:00 被阅读0次

对 virtual DOM 的理解

  • React.createElement 函数所返回的就是一个虚拟 DOM
  • 虚拟 DOM 就是一个描述真实 DOM 的纯 JS 对象
import React from 'react'
let virtualDOM = React.createElement('div', {id: 'A1', key: 'A1'}, React.createElement('div', {id: 'B1', key: 'B1'}, B1), React.createElement('div', {id: 'B2', key: 'B2'}, B2)
const symbolFor = Symbol.for;
const REACT_ELEMENT_TYPE = symbolFor('react.element');

/**
 *
 * @param {*} type 元素的类型
 * @param {*} config 配置对象
 * @param {*} children child
 */
const RESERVED_PROPS = {
  key: true,
  ref: true,
  __self: true,
  __source: true
}

export function createElement(type, config, children) {
  const props = {};
  // key 用来标示一个稳定元素
  let key = null;
  if (config !== null) {
    key = config.key;
  }

  for (let propName in config) {
    if (!RESERVED_PROPS.hasOwnProperty(propName)) {
      props[propName] = config[propName];
    }
  }

  const childrenLength = arguments.length - 2;
  if (childrenLength === 1) {
    props.children = children;
  } else if (childrenLength > 1) {
    const childArray = Array(childrenLength);
    for (let i = 0; i < childrenLength; i++) {
      childArray[i] = arguments[i+2]
    }
    props.children = childArray;
  }
  // React.createElement 方法返回的是一个普通的 js 对象,它可以描述元素的样子,它就是所谓的虚拟 dom
  // 虚拟 dom 是跨平台的,跟平台无关
  const element = {
    $$typeof: REACT_ELEMENT_TYPE,
    type,
    key,
    props
  }

  return element;
}

/**
 * children
 * 有可能是一个元素,可能是个字符串,可能是一个数字,null
 * 有可能有一个儿子,也有可能没有儿子,也有可能有多个儿子
 * props.children = null | string | number | React 元素
 *
 */

有什么优点

  • 处理了浏览器兼容性问题,避免了用户操作真实 dom
  • 内容经过 XSS 处理,可以防范 XSS 攻击
  • 容易实现跨平台开发 android、ios、vr 应用
  • 更新的时候可以实现差异化更新,减少更新 dom 操作

有什么缺点

  • 虚拟 dom 需要消耗额外的内存
  • 在初次渲染的时候,不一定更快,在更新的时候,更新的元素内容比较少,它可以实现精准的定量更新,不需要把全部的 dom 元素删除重添加
  • 虚拟 dom 的优势肯定不是更快

为什么要用 Virtual DOM

因为浏览器的标准就是把 DOM 设计得非常的复杂。如果我们频繁的操作 DOM,会产生一定的性能问题,我们通过操作一个简单的,抽象的 DOM,最后将差异尽可能一次性的 patch 到真实的 DOM 上,这样会减少很多性能问题

相关文章

  • virtual DOM 实现原理

    virtual DOM 实现: virtual-dom Snabbdom 对比 数据结构virtual Node ...

  • 实现简单render函数

    什么是Virtual Dom React和Vue2都使用了Virtual Dom技术,Virtual Dom并不是...

  • Day7:virtual dom & MVVM

    virtual dom 什么是virtual dom 虚拟dom 用JS模拟DOM结构 DOM变化的对比,放在JS...

  • Virtual DOM

    什么是 Virtual DOM Virtual DOM(虚拟 DOM),是由普通的 JS 对象来描述 DOM 对象...

  • Javascript 简要,你一定要看看

    1.Virtual DOM Vue 和 React 都使用了 Virtual DOM,那么什么是 Virtual ...

  • 虚拟DOM

    虚拟DOM 基础概念: virtual DOM是对真实DOM的描述和映射 当Virtual DOM改变后,我们得到...

  • 虚拟DOM

    Virtual DOM Virtual DOM,是由普通的JS对象来描述DOM对象,因为不是真实的DOM对象,所以...

  • 初探Virtual dom & diff算法

    问:Virtual dom 是什么?为何会存在Virtual dom?答:用JS模拟DOM结构。原因:1.DOM操...

  • iview表格render

    关于 RenderReact 和 Vue 2 都使用了 Virtual Dom 技术,Virtual Dom 并不...

  • JavaScript虚拟DOM

    什么是Virtual DOM Virtual DOM是对DOM的抽象,本质上是JavaScript对象,这个对象就...

网友评论

      本文标题:Virtual DOM

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