React与ReactDOM?

我有点新的反应。 我看到我们必须导入两件事开始, ReactReactDOM ,任何人都可以解释这个区别。 我正在阅读React文档 ,但没有说。

React和ReactDOM最近才分成两个不同的库。 在v0.14之前,所有的ReactDOMfunction都是React的一部分。 这可能是一个混淆的来源,因为任何稍微过时的文档都不会提及React / ReactDOM的区别。

顾名思义,ReactDOM是React和DOM之间的粘合剂。 通常情况下,您只能将其用于一件事情:使用ReactDOM.render()进行ReactDOM.render() 。 ReactDOM的另一个有用的function是ReactDOM.findDOMNode() ,您可以使用它来直接访问DOM元素。 (你应该在React应用程序中谨慎使用,但可能是必须的。)如果你的应用程序是“同构的”,你也可以在你的后端代码中使用ReactDOM.renderToString()

对于其他一切,有React。 您使用React来定义和创build您的元素,生命周期钩子等,即React应用程序的内核。

React和ReactDOM被分成两个库的原因是由于React Native的到来。 React包含Web和移动应用程序中使用的function。 ReactDOMfunction仅在Web应用程序中使用。 [ 更新:经过进一步的研究,很明显我对React Native的无知正在显现。 对于networking和移动设备来说,React包通用似乎更像是一种抱负而非现实。 React Native是目前完全不同的软件包。

查看宣布v0.14发布的博文: https ://facebook.github.io/react/blog/2015/10/07/react-v0.14.html

从React v0.14 Beta发布公告 。

当我们看像react-nativereact-artreact-canvasreact-three这样的软件包时,很明显React的美感和本质与浏览器或DOM无关。

为了使这个更加清晰,并且使构buildReact可以渲染的更多环境变得更加容易,我们将主要的反应包分为两个:react和react-dom。

从根本上来说,React的概念与浏览器无关,它们恰好是用于渲染组件树的许多目标之一。 ReactDOM包允许开发人员从React包中移除添加非必要的代码,并将其移入更合适的存储库。

react包包含React.createElementReact.createClassReact.ComponentReact.PropTypesReact.Children以及与元素和组件类相关的其他帮助器。 我们认为这些是你需要构build组件的同构或通用的帮助器。

react-dom包中包含ReactDOM.renderReactDOM.unmountComponentAtNodeReactDOM.findDOMNode ,在react-dom/server我们有ReactDOMServer.renderToStringReactDOMServer.renderToStaticMarkup服务器端渲染支持。

这两个段落解释了v0.13的核心API方法在v0.13结束。

ReactDOM模块公开了特定于DOM的方法,而React具有旨在由React在不同平台(例如React Native)上共享的核心工具。

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

为了更加简明,组件的反应是DOM DOM中组件的反应。 “react-dom”充当组件和DOM之间的粘合剂。 您将使用react-dom的render()方法来渲染DOM中的组件,这就是您开始使用它的所有内容。

看起来他们已经将React分解为reactreact-dom包,所以您不必为那些想在非DOM特定情况下使用它的项目使用DOM相关部分,就像在这里https://github.com/Flipboard/react-canvas他们import

 var React = require('react'); var ReactCanvas = require('react-canvas'); 

如你看到的。 没有react-dom

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。