Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript “什么是”呢;安装“;在js中?_Javascript_Reactjs - Fatal编程技术网

Javascript “什么是”呢;安装“;在js中?

Javascript “什么是”呢;安装“;在js中?,javascript,reactjs,Javascript,Reactjs,在学习时,我已经听了太多次“坐骑”这个词了。关于这个术语,似乎存在生命周期方法和错误。安装的确切含义是什么 示例:componentDidMount()和componentWillMount() 这里,componentDidMount是在呈现组件时由React自动调用的方法 概念是你告诉ReactJS,“请把这个东西、这个评论框、旋转图像或我想要的任何东西放在浏览器页面上,然后继续把它放在浏览器页面上。完成后,调用我绑定到componentDidMount的函数,这样我就可以继续了。” 组件将

在学习时,我已经听了太多次“坐骑”这个词了。关于这个术语,似乎存在生命周期方法和错误。安装的确切含义是什么

示例:
componentDidMount()和componentWillMount()

这里,componentDidMount是在呈现组件时由React自动调用的方法

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

组件将挂载
则相反。它将在组件渲染之前立即激发

请参见此处


最后,“mount”一词似乎是react.js所独有的。我不认为它是一个通用的javascript概念,甚至不是一个通用的浏览器概念。

挂载指的是当您的React组件第一次呈现时的初始页面加载。从React安装文档:组件安装:

在初始渲染发生后立即调用一次,仅在客户端(不在服务器上)上调用。在生命周期的这一点上,组件有一个DOM表示,您可以通过React.findDOMNode(this)访问它。


您可以将其与componentDidUpdate函数进行对比,componentDidUpdate函数被称为React渲染的每一次(初始装载除外)。

React的主要任务是找出如何修改DOM以匹配要在屏幕上渲染的组件

React通过“装载”(向DOM中添加节点)、“卸载”(从DOM中删除节点)和“更新”(对DOM中已有的节点进行更改)来实现

React节点如何表示为DOM节点以及它在DOM树中出现的位置和时间由管理。要更好地了解正在发生的事情,请查看最简单的示例:

// JSX version: let foo = <FooComponent />;
let foo = React.createElement(FooComponent);
它当前不在页面上的任何位置,即它不是DOM元素,不存在于DOM树中的任何位置,并且除了作为React元素节点之外,在文档中没有其他有意义的表示它只是告诉React如果呈现此React元素,屏幕上需要显示什么。它还没有“挂载”

您可以通过调用以下命令来告诉React将其“装载”到DOM容器中:

ReactDOM.render(foo, domContainer);
这告诉React是时候在页面上显示
foo
。React将创建
FooComponent
类的实例,并调用其
render
方法。假设它呈现一个
,在这种情况下,React将为它创建一个
div
DOM节点,并将其插入DOM容器中

创建与React组件对应的实例和DOM节点并将其插入DOM的过程称为装载。


请注意,通常只需调用
ReactDOM.render()
即可装入根组件。您不需要手动“挂载”子组件。每当父组件调用
setState()
,并且它的
render
方法说应该第一次呈现特定的子组件时,React将自动将该子组件“装载”到其父组件中。

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

React非常快,因为它从不直接与DOM对话。React维护DOM的快速内存表示

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

“我们认为React的真正基础仅仅是组件和元素的概念:能够以声明的方式描述您想要呈现的内容。这些是所有这些不同包共享的部分。React特定于某些呈现目标的部分通常不是我们想到React时所想到的。”-反应js博客

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

“当我们看到像react-native、react-art、react-canvas和react-three这样的包时,很明显react的美丽和本质与浏览器或DOM无关。”-react-js博客

现在,您知道了React的工作原理,很容易回答您的问题:)

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

在浏览器中,这意味着将React元素输出到DOM树中的实际DOM元素(例如HTMLdivli元素)。在本机应用程序中,这意味着将React元素输出到本机组件中。如果您有勇气,您还可以将自己的渲染器和输出组件编写成JSON或XML,甚至XAML

因此,装载/卸载处理程序对于React应用程序至关重要,因为您只能确保在装载组件时输出/呈现组件。但是,
componentDidMount
处理程序仅在呈现到实际的UI表示(DOM或本机组件)时调用,但在使用
renderToString
呈现到服务器上的HTML字符串时不会调用,这是有意义的,因为组件在重新加载之前不会实际装载
ReactDOM.render(foo, domContainer);