Reactjs 当我们使用JSX<;部门></部门>;,或者React.createElement(";div";,…),这是虚拟DOM(元素)吗?

Reactjs 当我们使用JSX<;部门></部门>;,或者React.createElement(";div";,…),这是虚拟DOM(元素)吗?,reactjs,jsx,virtual-dom,Reactjs,Jsx,Virtual Dom,当我们使用JSX时 let el = <div></div>; (他们是一模一样的,好吧)。是el,还是虚拟DOM(元素),还是虚拟DOM意味着其他东西?所以我的问题是,什么将成为虚拟DOM的一部分React.createElement()创建一个对象。这个对象会成为虚拟DOM(树)的一部分吗 我想知道虚拟DOM是指存储所有元素的整个树还是虚拟文档对象模型。当我们说,ReactDOM.render(,rootEl)时,它将虚拟DOM元素渲染到虚拟DOM树和实际DOM树中

当我们使用JSX时

let el = <div></div>;
(他们是一模一样的,好吧)。是
el
,还是
虚拟DOM(元素),还是虚拟DOM意味着其他东西?所以我的问题是,什么将成为虚拟DOM的一部分
React.createElement()
创建一个对象。这个对象会成为虚拟DOM(树)的一部分吗


我想知道虚拟DOM是指存储所有元素的整个树还是虚拟文档对象模型。当我们说,
ReactDOM.render(,rootEl)
时,它将虚拟DOM元素渲染到虚拟DOM树和实际DOM树中。(就像
让el=document.createElement()
创建实际的DOM元素,而
document.body.appendChild(el)
将DOM元素添加到DOM树中。)因此
React.createElement('div',…)
创建的东西将成为虚拟DOM的一部分。

它们是一样的,但是当您有很多元素时,使用JSX更具可读性。这就是为什么它被称为语法糖,它可以帮助您获得更好的结构化代码,您可以轻松阅读。

当您使用
React.createElement()
†时,您可以创建要呈现的元素的描述:

> React.createElement('div', [], "Hello, world!");
{ '$$typeof': Symbol(react.element),
  type: 'div',
  key: null,
  ref: null,
  props: { children: 'Hello, world!' },
  _owner: null,
  _store: {} }
这些元素中的每一个都可以依次渲染其他元素以形成树

当您将根节点传递给
ReactDOM.render()
(和friends>)时,ReactDOM会将此元素描述转换为初始渲染,并将其插入DOM

当更新发生在树中时,React将重新呈现其所有子体(只有少数例外),并且通过一个名为React的过程,React将使新版本与其呈现的前一版本有所不同。React然后将获取diff并应用将旧DOM状态转换为下一个所需DOM状态所需的操作

当我们谈论“虚拟DOM”时,DOM当前状态表示的内存存储就是这个意思

使用<代码> Real.CueLeEntEngEnter()/代码>不是我个人认为的虚拟DOM,因为它实际上不是虚拟DOM模型的一部分,除非它被传递给<代码> RANDER()/<代码>(直接或作为被传递的树的一部分)。 您可以在的React页面上找到有关diffing的信息,在关于的页面上有更深入的讨论


脚注:


React.createElement('div',[],'Hello,world!')
相同,你好,世界。您的编译器将JSX编译成一系列
React.createElement
调用。

似乎我误解了您的问题,因为我对React的内部结构没有深入的了解-我已经删除了它。对不起,太长了,读不下去了,(我没有回答),但是我已经更新了我的答案,但是TL;Dr不使用<代码> Real.CueLeEnTeMe()/Cuff>不将元素添加到虚拟DOM。
本身不做任何事情,也不会将其添加到所需状态我并不是在问
React.createElemet()
是否相同
> React.createElement('div', [], "Hello, world!");
{ '$$typeof': Symbol(react.element),
  type: 'div',
  key: null,
  ref: null,
  props: { children: 'Hello, world!' },
  _owner: null,
  _store: {} }