美文网首页
为什么 React 不推荐操作 DOM

为什么 React 不推荐操作 DOM

作者: 芝麻香油 | 来源:发表于2018-03-18 21:52 被阅读0次

在学习 React 之初,在它的官方文档上,很容易会看到 Virtual DOM,并且文档中也会写着,React 不推荐操作真实 DOM。那么,你有想过这是为什么吗?

最开始,查了很多关于 React 的资料,了解了Virtual DOM 和DOM,然而并未能真正解答为什么 React 不推荐操作DOM?

最近偶然看到这样一句话,DOM 操作会引起浏览器对网页进行重新布局,重新绘制。

那么,浏览器的渲染机制又是什么呢?

如上图,浏览器的渲染机制可以归纳为四个步骤:

  • 解析HTML以构建DOM树:渲染引擎开始解析HTML文档,转换树种的HTML标签或js生成的标签到DOM节点,它被称为——内容树。
  • 构建渲染树:解析CSS(包括外部CSS文件和样式元素以及js生成的样式),根据CSS选择器计算出节点的样式,创建另一个树——渲染树。
  • 布局渲染树:从根节点递归调用,计算每一个元素的大小、位置等,给每个节点所应该出现在屏幕上的精确坐标。
  • 绘制渲染树:遍历渲染树,每个节点将使用UI后端层来绘制。

从图中可以看出 Repaint 和 Reflow 分别出现在了第三步和第四步。而在我们操作DOM的时候,就有可能引起页面结构或者页面展示的变化;页面结构的变化会触发 Reflow,页面展示的变化会触发 Repaint

关于Reflow和Repaint,简单讲,你在操作DOM前截一次屏,操作之后再截一次屏,如果你两次截屏每个坐标上的东西一样,那么久不需要 Reflow;Repaint 发生更改时,元素的外观被改变,且在没有改变布局的情况下发生,如改变 outline,visibility,background color,不会影响DOM结构。

什么会引起Repaint?

  • Change Visibility : hidden to visible
  • Change background , border-color , color
  • Elements skin changes visibility , but do not affect it’s layout

什么会引起Reflow?

  • Resizing the window
  • Changing the font
  • Adding or removing a stylesheet
  • Content changes, such as a user typing text in an input box
  • Activation of CSS pseudo classes such as :hover (in IE the activation of the pseudo class of a sibling)
  • Manipulating the class attribute
  • A script manipulating the DOM
  • Calculating offsetWidth and offsetHeight
  • Setting a property of the style attribute

Reflow 都会引起 Repaint。

相关文章

  • 为什么 React 不推荐操作 DOM

    在学习 React 之初,在它的官方文档上,很容易会看到 Virtual DOM,并且文档中也会写着,React ...

  • React 性能调优

    为什么需要调优 React 提高性能的方式:虚拟DOM, diff算法,将DOM操作减到最少, 但是... 父组件...

  • 六、react基本概念

    1、react-dom和react为什么要分开因为还有react-dom、react-canvas、react-a...

  • React如何操作真实DOM

    最近在学习React的过程中遇到了一个问题,React怎么操作真实的DOM? 我们知道,React组件操作的DOM...

  • 数据操作dom的添加和删除

    一、react操作页面元素的途径 react使用数据绑定操作dom,如果绑定的数据多了,那么dom元素就多了;删除...

  • (一)使用 React 编写 TodoList 功能

    不直接操作DOM,操作的是数据,React会自动感知到数据的变化,自动的去生成DOM。 效果图 主要代码-Todo...

  • React01-开始

    在记录react的学习之路开始,我想先谈谈为什么会有react假如有一个页面,页面上有一个dom,要操作这个dom...

  • react基础入门:(二)原生JS操作DOM元素

    原文链接:react基础入门:(二)原生JS操作DOM元素 一 初始化项目 二 操作 DOM 获取 dom 元素 ...

  • react

    1.react特点 虚拟DOM,react非常快速因为它从不直接操作DOM。render()方法实际上是对DOM描...

  • 使用ref获取DOM元素和组件

    一、获取DOM元素虽然可以通过原生js操作获取到DOM元素,但是Vue等框架已经不推荐自己操作DOM了,都扔给框架...

网友评论

      本文标题:为什么 React 不推荐操作 DOM

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