我正在使用ES6 babel做出反应,现在对于新版本的反应,反应DOM不再是它的一部分了。我对以下代码的疑问是,它是第一行需要的吗?因为我无处需要React,但最后一行我需要ReactDOM。
const React = require('react')
const ReactDOM = require('react-dom')
const App = () => {
return (
<div className='app-container'>
<div className='home-info'>
<h1 className='title'>sVideo</h1>
<input className='search' type='text' placeholder='Search' />
<button className='browse-all'> or Browse All</button>
</div>
</div>
)
}
ReactDOM.render(<App />, document.getElementById('app'))
答案 0 :(得分:11)
从版本0.14
开始的React分为两部分: React 和 ReactDOM。您正在使用ReactDOM to render you HTML element
。因此,对于组件中的import ReactDOM
来说,这绝对是有意义的。但就React而言,尽管你并没有直接使用React,但它是间接使用的,因为你在return statement will be transpiled into React.createElement
函数中编写的任何内容都将创建实际的DOM元素。
现在你可以看到这个,如果你在代码中省略了React,你会看到一个错误
反应不存在
它会给你React is not recognised in React.createElement.
希望你理解它。
答案 1 :(得分:2)
来自ReactDOM
的文档:
此包用作DOM相关呈现路径的入口点。它旨在与同构React配对,它将作为对npm的反应发送。
因此,您的ReactDOM
专门用于与DOM相关的渲染路径。这个使用与React包本身紧密结合,但React中的内置DOM已被弃用。
现在,Facebook将ReactDOM单独作为自己的软件包发布,所以是的,如果你计划渲染你的任何React,你需要将它包含在你的应用程序中。你肯定也需要React
本身 - ReactDOM
只是DOM方面。
这是reddit post that explains the separation from React and ReactDOM。
React团队正致力于将所有与DOM相关的东西提取到一个名为ReactDOM的独立库中。 0.14是第一个拆分库的版本。
很有趣的事实,因为他们想要支持向后兼容性,他们保留了React的内部DOM,但阻止人们使用它in a funny way。
答案 2 :(得分:0)
它们与版本0.14分开,对于任何反应项目,您需要包含两者, ReactDOM 正在 React , React ,没有 ReactDOM 无法呈现给 DOM ,所以答案很大是!
答案 3 :(得分:0)
React需要分离与生成Web应用程序(HTML DOM)无关的核心反应代码。特别是react-native,React Native需要一组不同的软件包,而react-dom
不是其中一个。
如果react库从未拆分过与DOM相关的代码,那么react-native项目将具有核心的React代码,它们的重量很轻,然后需要使用摇树和Dead代码消除的方法删除,以删除其中的模块从未导入为您的应用程序的一部分。
对此代码进行反应很有意义。