ReactJS-关于虚拟DOM和RE -CONCONITION
#javascript #网络开发人员 #react #法国

在本文中,我们将讨论虚拟dom re -concomiation ,这是varoppers reactjs 的概念,但哪个是但是,构成了他们工具的cåur。我将结束您这些概念,您将在示例的帮助下对它们进行说明,以便一劳永逸!

概括

介绍

许多人认为ReactJS居民使用 Virtual Dom 的秘密,后者给他带来了速度优于dom!在Allités中,并不是全部。令您遗憾的是,反应并不比DOM更快。这会说,可以比光速更快。让我们更多地看一下React使用虚拟DOM的原因。

Image description

我向您保证,如果您不了解本文第一次解决的所有概念,CAF是正常的。我们将进入 reactjs 的肠子以了解其功能。 Prie跟随我?因此,请拿起火炬灯,让我们清除虚拟dom re -Assessment

虚拟DOM

我们不得混淆DOM和虚拟DOM。 dom 是对网页的结构和内容的复制。浏览器可以操纵DOM,以便修改显示页面。另一方面,虚拟dom n - 是 copy 以对象的形式 javascript

reactjs是一款书商,是基于 State Driver UI 的原理(或由Good French领导的用户界面。 状态的更改组件导致了用户界面的接收器。然后,组成部分以及他的所有孩子都被DOM恢复了。随着DOM进行的操作数量,这种类型可以是非常椰子,这意味着不良表现

在Allité中,React不会要求DOM接收邀请GralitéDeLâ接口用户,他将在虚拟DOM上致电。虚拟DOM的可节奏目标是最大程度地减少 dom 必须是的操作数量

虚拟DOM因此有两个禁令:

  1. 他通过带来应用程序的性能来提出Lâ ux (用户体验)。
  2. 他带来了 dx (侦探膨胀),使其在操纵DOM的操作中抽象,从而担心匹配的问题而不是DOM管理问题。 当时无需打破头部,即负责的反应的咖啡馆。

现在我们已经看到了工厂中的虚拟DOM。

reactj中虚拟DOM的操作

当时所说,虚拟DOM是一个JavaScript对象。但是它是什么样的?

让我们以以下反应代码为例:

export default function Counter() {
    const [count, setCount] = useState(0);

    return (
        <>
            <p>Ceci est un compteur</p>
            <button onClick={() => setCount((count) => count + 1)}>
                Total : {count}
            </button>
        </>
    )
}

此代码导致以下接口:

Image description

您有一个带有段落和按钮的React片段的组成部分。当您单击按钮时,包括Sâcount。

可以这样看到上面的代码:

const element = React.createElement(
    React.Fragment,
    null,
    React.createElement("p", null, "Ceci est un compteur"),
    React.createElement("button", null, "Total : 11"),
)

虚拟dom的样子

Image description

jâ提请您注意以上对象的类型属性:

$$typeof: Symbol(react.element)

在React中,构成DOM的任何版本都是A React元素。这些长者被放置在虚拟DOM中。

因此,我们具有由nåuds(react元素)组成的 tree (虚拟DOM)。如果您得出了这个主题,那么您肯定知道,在后果中,nåuds并不是真正的 react元素正确说话,而是纤维。为了简化问题,将在这里告诉我们React元素。

现在我们知道虚拟dom是什么,它的外观,但是我们真的不知道它在reactjs中是如何使用的。

lise©gie d reactjs的优化

我们已经说过,虚拟domnâ不是反应的特征。建立优化的

让我们看看用户界面的更新如何工作。有两个可能的操作。我们要么初始化或更新。

初始化

首次渲染期间,Reactcrée©©lâlâlâlâlâlâlâlâlâdom dom的树在 moire 中重现用户界面和库存。

在我们的示例中,我们将拥有以下树:

Image description

更新

状态在一个 React元素之一中更改时,得出了虚拟dom 的另一个版本。因此,我们最终以当前树是Moire andLâ更新树的旧版本,这是带有要求的更新的树。

在本示例中,当我们单击按钮时,我们包括countrta仪表。因此,通过更新的按钮的文本生成了一个新版本的lâeTrea。

Image description

ReactJ因此可以具有用户当前状态和lâ的用户界面的再现,用户需要的更改。您会告诉我,React一餐中有两棵树,但是他如何更新DOM?

必需品很简单,React将在 Conemation 的点击中调用。但是,如果您记得在介绍中对您说话太多的单词!我为悬念持续了这么长时间而被原谅,因此,女士们和先生们,请为 re -reassessment 的工作腾出空间。

和解

Image description

re -Concomiation 是检测用户界面中的变化并将其应用于DOM的。正如我们已经看到的那样,修饰后的Reactcrés第二个繁殖虚拟界面。必须保存在窒息的咖啡馆中的是,虚拟的dom n y ny The Bist of the Becroduction of the Cran的复制品都不会出现。在界面状态的摩尔河中仅反应两次复制。因此,有必要收到与经过修改影响的长者提出的事件。为此,React使用比较算法

Lâ比较算法

此算法采用两棵树(当前树和更新树),并在两棵树上进行以下处理:

Image description

一旦通过所有节点传递算法,React就知道DOM的两个虚拟复制品之间的变化。

DOM的更改应用

Image description

比较算法后,React具有变化列表是要转换DOM。 React使用 React Dom BookStore 将这些更改应用于DomðReact Dom NPM

在V16之前,使用堆栈和解。原理很简单,tat 的每一个变化都放在电池中。电池填充后,我们来对每种更改进行 Action 进行搅拌。此过程由同步制成,并提出了许多性能和流动性问题,否认用户的扩展。 在V16期间,

改善了这一点,对该系统进行了反应,并提出了纤维算法的溶液

这种纤维算法,在用户界面中使用的更改不再由同步制成,而是异步。每个修改都被视为具有状态和优先级的工作单位。所有工作单元均可中断覆盖annulé。因此,React可以优先考虑重大变化,并将其放置在那些不太如此的背景中。

如果您想覆盖纤维算法的深度,我建议您阅读以下文章:
ðAn Introduction to React Fiber - The Algorithm Behind React

1at。Inside Fiber: in-depth overview of the new reconciliation algorithm in React

结论

阅读本文后,您应该更好地了解虚拟dom 以及和解,这是隐藏在React背后的两个概念。为了了解其功能,我们已经陷入了书店的肠子。

因此,我们已经看到,虚拟dom n n并不是一个功能,而是将Reactjs的工具按下,以设置其 Stratot©Domme dom stratot©gie gie gie >。虚拟DOM允许您直接处理对象而不是DOM。因此,React可以优化DOM中使用的动作数量。结合 re -Concoliation 的点击,我们得到了非常有效的处理来以最佳的方式采取很多操作。

我们还看到,虚拟dom 对反应至关重要,因为电缆是如此的国家书店。 Reactjsnâ不比DOM快,但是它对此类书店的优化非常优化,这使其全部闻名!

这个虚拟的DOM React为我们提供了关注真正重要的东西,用户体验,而不是专注于技术缺陷,例如更新DOM。

Reactjs的秘诀是,咖啡馆是在 dx 质量和A ux 优化之间提供甜美的含义。