Reactjs 当我们使用JSX<;部门></部门>;,或者React.createElement(";div";,…),这是虚拟DOM(元素)吗?
当我们使用JSX时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树中
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: {} }