我有点新的反应.我看到我们必须导入两件事才能开始,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包更像是一种渴望,而不是现实.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
,它很清楚,美和本质作出反应无关,与浏览器或DOM.为了使这一点更加清晰,并且更容易构建React可以渲染的更多环境,我们将主反应包分成两部分:react和react-dom.
从根本上说,React的概念与浏览器无关,它们恰好是渲染组件树的众多目标之一.ReactDOM包允许开发人员从React包中删除添加非必要代码并将其移动到更合适的存储库中.
所述
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
.
这两段解释了核心API方法v0.13
最终的位置.
在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() { returnHello World; } }); ReactDOM.render(, 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。
ReactDOM模块公开特定于DOM的方法,而React具有旨在由React在不同平台(例如React Native)上共享的核心工具.
http://facebook.github.io/react/docs/tutorial.html