反应与反应DOM混淆

时间:2016-09-29 03:12:35

标签: javascript reactjs

我正在使用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'))

4 个答案:

答案 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代码消除的方法删除,以删除其中的模块从未导入为您的应用程序的一部分。

对此代码进行反应很有意义。