React js中的“挂载”是什么?

在学习ReactJS的过程中,我听到“mount”这个词太多次了。 而且似乎有关于这个术语的生命周期方法和错误。 React是什么意思?

例子: componentDidMount() and componentWillMount()

在React中,您使用的组件可以被表示为React节点和DOM节点。

React节点如何表示为DOM节点,以及它出现在DOM树中的何时何地由顶层APIpipe理 。 为了更好地了解正在发生的事情,请看下面最简单的例子:

 let foo = React.createElement(FooComponent); 

那么,什么是foo ,你可以用它做什么? foo目前是FooComponent Reacttypes的一个实例。 它目前不在页面上的任何地方,即它不是DOM元素,不存在于DOM树中的任何地方,除了是React元素节点之外,在文档中没有其他有意义的表示。

如果你打电话给React.findDOMNode(foo)你会得到一个虚假的对象。 为什么? foo没有DOM表示,因为它当前不需要存在于DOM树中的任何地方。

但是,一旦您尝试在文档中安装React元素节点,您将触发组件生命周期,这将创build一个合适的托pipeDOM节点:

 React.render(foo, container); 

从这一点来说, foo不再只是一个React节点。 它有一个关联的DOM节点,现在是文档中的头等公民。 现在,您可以将其作为树中的某个实际DOM节点进行查找,并与其他DOM元素进行交互:计算高度,宽度,应用其他样式,将其传递给jQuery等。

React是一个同构/通用的框架。 这意味着有一个UI组件树的虚拟表示,它与它在浏览器中输出的实际渲染是分开的。 从文档:

反应是如此之快,因为它从来没有直接与DOM谈话。 React维护DOM的快速内存表示。

然而,内存中的表示并不直接绑定到浏览器中的DOM(即使它被称为虚拟DOM, 对于通用的应用程序框架来说是一个不幸和令人困惑的名字 ),而且它只是一个类似DOM的数据 -表示所有UI组件层次结构和附加元数据的结构。 虚拟DOM只是一个实现细节。

“我们认为React的真正基础只是组件和元素的概念:能够以声明的方式描述你想要渲染的东西,这些是所有这些不同的包所共享的部分,特定于渲染的React部分目标通常不是我们想到React时想到的。“ – 反应js博客

所以,结论是React是不可知的 ,这意味着它不关心什么是最终的输出。 它可以是浏览器中的DOM树,可以是XML,Native组件或JSON。

“当我们看像反应原生,反应艺术,反应canvas和反应三个包时,很明显React的美丽和本质与浏览器或DOM无关。” – 反应js博客

现在,你知道React如何工作,很容易回答你的问题:)

挂载是将组件的虚拟表示输出到最终UI表示(例如,DOM或本地组件)的过程。

在浏览器中,这意味着要将一个React元素输出到DOM树中的实际DOM元素(例如HTML divli元素)中。 在本地应用程序中,这意味着将React元素输出到本地组件。 如果您有勇气,您也可以编写自己的渲染器,并将React组件输出为JSON或XML,甚至是XAML。

所以,挂载/卸载处理程序对于React应用程序来说是至关重要的,因为你只能确定一个组件在挂载时被输出/渲染。 但是, componentDidMount处理程序仅在渲染到实际的UI表示(DOM或本地组件)时调用,而不是在使用renderToString呈现到服务器上的HTMLstring时renderToString ,这是有道理的,因为组件直到它到达浏览器并在其中执行。

而且,是的,如果你问我, Mount也是一个不幸的名字。 恕我直言, componentDidRendercomponentWillRender将是更好的名字。

http://www.ministryofprogramming.com/react-js-the-king-of-universal-apps/

https://facebook.github.io/react/docs/tutorial.html

在这里,componentDidMount是在渲染组件时由React自动调用的方法。

这个概念就是你告诉ReactJS:“请把这个东西,这个评论框或者旋转图像,或者我想要的任何东西放在浏览器页面上,然后放到浏览器页面上,然后调用我已经绑定到componentDidMount函数,所以我可以继续。

componentWillMount则相反。 它会在您的组件呈现之前立即触发。

另见https://facebook.github.io/react/docs/component-specs.html

最后,“mount”这个词对react.js来说似乎是独一无二的。 我不认为这是一个通用的JavaScript概念,甚至是一个普通的浏览器概念。

装入是指在首次渲染React组件时的初始页面加载。 从React文档的安装:componentDidMount:

Invoked once, only on the client (not on the server), immediately after the initial rendering occurs. At this point in the lifecycle, the component has a DOM representation which you can access via React.findDOMNode(this).

你可以将它与componentDidUpdate函数进行对比,每次React渲染时(除了初始安装),都会调用它。

挂载是指将React(创build的DOM节点)中的组件附加到文档的某个部分。 而已!

忽略React,你可以把这两个本地函数想象成挂载:

的replaceChild

使用appendChild

这可能是React用来内部安装的最常用的函数。

考虑到:

componentWillMount ===在挂载之前

和:

componentDidMount ===后装

React js的主要目标是创build可重用的组件。 这里,组件是网页的各个部分。 例如,在网页中,页眉是一个组件,页脚是一个组件,一个吐司通知是一个组件等。术语“安装”告诉我们,这些组件被加载或呈现在DOM中。 这些是许多顶级的API和方法处理这个。

为了简单起见,挂载意味着组件已经加载到DOM,卸载意味着组件已经从DOM中删除。