我对React还不太熟悉。我发现我们需要导入两个东西才能开始使用:React
和ReactDOM
,能否有人解释一下它们的区别?我正在阅读React文档,但里面没有说。
React和ReactDOM最近被拆分成两个不同的库。在v0.14之前,所有ReactDOM功能都是React的一部分。这可能会引起困惑,因为任何稍有陈旧的文档都不会提到React / ReactDOM的区别。
顾名思义,ReactDOM是React和DOM之间的粘合剂。通常,您只会使用它进行一个简单的操作:使用ReactDOM.render()
进行挂载。ReactDOM的另一个有用特性是ReactDOM.findDOMNode()
, 您可以使用它直接访问DOM元素。(在React应用程序中应谨慎使用,但有时是必要的。)如果您的应用程序是“同构”的,那么您还将在后端代码中使用ReactDOM.renderToString()
。
对于其他所有情况,请使用React。您使用React来定义和创建元素,处理生命周期钩子等等,即React应用程序的实质。
将React和ReactDOM拆分成两个库的原因是出现了React Native。React包含在Web和移动应用程序中使用的功能。ReactDOM仅在Web应用程序中使用功能。[更新:经过进一步研究,我发现我的React Native知识有限。目前,将React软件包共享给Web和移动应用程序似乎更多地是一种愿景而不是现实。React Native目前是完全不同的软件包。]
请参阅发布v0.14版本的博客文章:https://facebook.github.io/react/blog/2015/10/07/react-v0.14.html
react-native
, react-art
, react-canvas
, 以及 react-three
这些包都表明了 React 的美丽和精髓与浏览器或 DOM 没有任何关系。react
包包含 React.createElement
, React.createClass
, React.Component
, React.PropTypes
, React.Children
, 以及与元素和组件类相关的其他帮助程序。我们认为这些是构建组件所需的同构或通用帮助程序。
react-dom
包包括 ReactDOM.render
, ReactDOM.unmountComponentAtNode
, 和 ReactDOM.findDOMNode
,而在 react-dom/server
中,我们提供了服务器端渲染支持,包括 ReactDOMServer.renderToString
和 ReactDOMServer.renderToStaticMarkup
。这两段文字解释了 v0.13
中核心 API 方法的去向。
ReactDOM
- https://facebook.github.io/react/blog/2016/11/16/react-v15.4.0.html - Rycochet简述 创建和使用组件和钩子需要安装React包,react-dom包含react-dom/client和react-dom/server用于在浏览器的DOM中或在服务器上的字符串(或流)中呈现你的应用程序。使用React-Native可以使用React创建Android和iOS原生应用。
在v0.14版本之前,它们是ReactJs主文件的一部分,但是由于有些情况下我们可能不需要两者,所以它们被分离出来,并从0.14版本开始。这样,如果我们只需要其中一个,我们的应用程序将更小,因为只使用其中一个:
var React = require('react'); /* importing react */
var ReactDOM = require('react-dom'); /* importing react-dom */
var MyComponent = React.createClass({
render: function() {
return <div>Hello World</div>;
}
});
ReactDOM.render(<MyComponent />, node);
React 包含:React.createElement、React.createClass、React.Component、React.PropTypes 和 React.Children。
React-dom 包含:ReactDOM.render、ReactDOM.unmountComponentAtNode、ReactDOM.findDOMNode,以及包含 react-dom/server 的 ReactDOMServer.renderToString 和 ReactDOMServer.renderToStaticMarkup。
react
和react-dom
两个包,因此在项目中您不必使用与DOM相关的部分,可以在非DOM特定情况下使用它,比如在这里:https://github.com/Flipboard/react-canvas,他们导入的是哪个包。var React = require('react');
var ReactCanvas = require('react-canvas');
正如你所看到的,没有 react-dom
。
React: React是一个JavaScript库,专为构建更好的用户界面而设计。
React-DOM: React-DOM是React的一个补充库,将React与浏览器DOM连接起来。
我们正在使用React,每当我们使用render() 或findDOMNode()等方法时,我们都在使用React-DOM。
随着我们看到像react-native、react-art、react-canvas和react-three这样的包,变得越来越清晰:React的美丽和本质与浏览器或DOM无关。为了更清晰地表达这一点并使其更容易为React构建更多环境,他们将主要的React包分成两个部分:react和react-dom。
React package
包含了组件、状态、属性以及所有的React代码。
React-DOM
包是React和DOM之间的粘合剂。通常,你只需要用它来完成一件事情:使用ReactDOM.render()方法将你的应用程序挂载到index.html文件上
。
为什么要把它们分开?
React和ReactDOM被拆分成两个库的原因是出现了React Native(一个用于移动开发的React平台)。
React package包含组件、状态、属性以及所有React代码的源代码。
React-DOM包作为名称意味着它是React和DOM之间的粘合剂。通常情况下,您只需要使用ReactDOM.render()将应用程序挂载到index.html文件中。