React与ReactDOM?
我有点新的反应。 我看到我们必须导入两件事开始, React
和ReactDOM
,任何人都可以解释这个区别。 我正在阅读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-native
,react-art
,react-canvas
和react-three
这样的软件包时,很明显React的美感和本质与浏览器或DOM无关。为了使这个更加清晰,并且使构buildReact可以渲染的更多环境变得更加容易,我们将主要的反应包分为两个:react和react-dom。
从根本上来说,React的概念与浏览器无关,它们恰好是用于渲染组件树的许多目标之一。 ReactDOM包允许开发人员从React包中移除添加非必要的代码,并将其移入更合适的存储库。
react
包包含React.createElement
,React.createClass
和React.Component
,React.PropTypes
,React.Children
以及与元素和组件类相关的其他帮助器。 我们认为这些是你需要构build组件的同构或通用的帮助器。
react-dom
包中包含ReactDOM.render
,ReactDOM.unmountComponentAtNode
和ReactDOM.findDOMNode
,在react-dom/server
我们有ReactDOMServer.renderToString
和ReactDOMServer.renderToStaticMarkup
服务器端渲染支持。
这两个段落解释了v0.13
的核心API方法在v0.13
结束。
ReactDOM模块公开了特定于DOM的方法,而React具有旨在由React在不同平台(例如React Native)上共享的核心工具。
为了更加简明,组件的反应是DOM DOM中组件的反应。 “react-dom”充当组件和DOM之间的粘合剂。 您将使用react-dom的render()方法来渲染DOM中的组件,这就是您开始使用它的所有内容。
看起来他们已经将React分解为react
和react-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。