1. 安装 react

要使用 react,就必须装下面两个包的。

`$ npm <span class="hljs-keyword">install</span> <span class="hljs-comment">--save react react-dom</span>
`

2. 建立 babel

可能你不懂 babel 是什么,你可以把它理解为编译器,它能把 react 代码转成一般浏览器可读可执行的代码,通常可以用它来转化 react 或 vue 这样的前端代码,或者把 es6 代码转成普通的 javascript 代码等等。

如果还不理解的话,可以看我这篇文章 babel 入门指南

要让 babel 很好的转化 react 代码,首先要安装好 babel,再装 babel 转化 react 的包。

运行下面的命令。

`$ npm <span class="hljs-keyword">install</span> <span class="hljs-comment">--save-dev babel-core babel-preset-react babel-preset-env</span>
`

创建 .babelrc 文件。

{
  <span class="hljs-attr">"presets"</span>: [<span class="hljs-string">"env"</span>, <span class="hljs-string">"react"</span>]
}

为什么我知道要这么做呢?

因为我是分别结合 babel 和 react 的官网给的最新官方指南。

可以参考下面两个链接:

3. 在 webpack 使用 babel-loader

最后我们需要在 webpack 中使用一个 loader 来转化 react 的代码。

首先,安装。

`$ npm &lt;span class="hljs-keyword">install&lt;/span> &lt;span class="hljs-comment">--save-dev babel-loader&lt;/span>
`

webpack.config.js

`&lt;span class="hljs-keyword">var&lt;/span> HtmlWebpackPlugin = &lt;span class="hljs-built_in">require&lt;/span>(&lt;span class="hljs-string">'html-webpack-plugin'&lt;/span>);
&lt;span class="hljs-keyword">const&lt;/span> ExtractTextPlugin = &lt;span class="hljs-built_in">require&lt;/span>(&lt;span class="hljs-string">'extract-text-webpack-plugin'&lt;/span>);

&lt;span class="hljs-built_in">module&lt;/span>.exports = {
  &lt;span class="hljs-attr">entry&lt;/span>: &lt;span class="hljs-string">'./src/app.js'&lt;/span>,
  ...
  module: {
    &lt;span class="hljs-attr">rules&lt;/span>: [
      {
        &lt;span class="hljs-attr">test&lt;/span>: &lt;span class="hljs-regexp">/\.scss$/&lt;/span>,
        &lt;span class="hljs-attr">use&lt;/span>: ExtractTextPlugin.extract({
          &lt;span class="hljs-attr">fallback&lt;/span>: &lt;span class="hljs-string">'style-loader'&lt;/span>,
          &lt;span class="hljs-comment">//resolve-url-loader may be chained before sass-loader if necessary&lt;/span>
          use: [&lt;span class="hljs-string">'css-loader'&lt;/span>, &lt;span class="hljs-string">'sass-loader'&lt;/span>]
        })
      },
      &lt;span class="hljs-comment">// 这两行是处理 react 相关的内容&lt;/span>
      { &lt;span class="hljs-attr">test&lt;/span>: &lt;span class="hljs-regexp">/\.js$/&lt;/span>, &lt;span class="hljs-attr">loader&lt;/span>: &lt;span class="hljs-string">'babel-loader'&lt;/span>, &lt;span class="hljs-attr">exclude&lt;/span>: &lt;span class="hljs-regexp">/node_modules/&lt;/span> },
      { &lt;span class="hljs-attr">test&lt;/span>: &lt;span class="hljs-regexp">/\.jsx$/&lt;/span>, &lt;span class="hljs-attr">loader&lt;/span>: &lt;span class="hljs-string">'babel-loader'&lt;/span>, &lt;span class="hljs-attr">exclude&lt;/span>: &lt;span class="hljs-regexp">/node_modules/&lt;/span> }
    ]
  }
};
`

4. 写 react 组件

接着我们来准备一些 react 的代码,要来测试一下。

src/index.html

`&lt;span class="hljs-meta">&lt;!DOCTYPE html&gt;&lt;/span>
&lt;span class="hljs-tag">&lt;&lt;span class="hljs-name">html&lt;/span> &lt;span class="hljs-attr">lang&lt;/span>=&lt;span class="hljs-string">"en"&lt;/span>&gt;&lt;/span>
&lt;span class="hljs-tag">&lt;&lt;span class="hljs-name">head&lt;/span>&gt;&lt;/span>
  &lt;span class="hljs-tag">&lt;&lt;span class="hljs-name">meta&lt;/span> &lt;span class="hljs-attr">charset&lt;/span>=&lt;span class="hljs-string">"UTF-8"&lt;/span>&gt;&lt;/span>
  &lt;span class="hljs-tag">&lt;&lt;span class="hljs-name">title&lt;/span>&gt;&lt;/span>Hello World&lt;span class="hljs-tag">&lt;/&lt;span class="hljs-name">title&lt;/span>&gt;&lt;/span>
&lt;span class="hljs-tag">&lt;/&lt;span class="hljs-name">head&lt;/span>&gt;&lt;/span>
&lt;span class="hljs-tag">&lt;&lt;span class="hljs-name">body&lt;/span>&gt;&lt;/span>
  &lt;span class="hljs-tag">&lt;&lt;span class="hljs-name">div&lt;/span> &lt;span class="hljs-attr">id&lt;/span>=&lt;span class="hljs-string">"root"&lt;/span>&gt;&lt;/span>&lt;span class="hljs-tag">&lt;/&lt;span class="hljs-name">div&lt;/span>&gt;&lt;/span>
&lt;span class="hljs-tag">&lt;/&lt;span class="hljs-name">body&lt;/span>&gt;&lt;/span>
&lt;span class="hljs-tag">&lt;/&lt;span class="hljs-name">html&lt;/span>&gt;&lt;/span>
`

src/app.js

`&lt;span class="hljs-keyword">import&lt;/span> css &lt;span class="hljs-keyword">from&lt;/span> &lt;span class="hljs-string">'./app.scss'&lt;/span>;

&lt;span class="hljs-keyword">import&lt;/span> React &lt;span class="hljs-keyword">from&lt;/span> &lt;span class="hljs-string">'react'&lt;/span>;
&lt;span class="hljs-keyword">import&lt;/span> ReactDOM &lt;span class="hljs-keyword">from&lt;/span> &lt;span class="hljs-string">'react-dom'&lt;/span>;
&lt;span class="hljs-keyword">import&lt;/span> Root &lt;span class="hljs-keyword">from&lt;/span> &lt;span class="hljs-string">'./Root'&lt;/span>;

ReactDOM.render(
  &lt;span class="xml">&lt;span class="hljs-tag">&lt;&lt;span class="hljs-name">Root&lt;/span>&gt;&lt;/span>&lt;span class="hljs-tag">&lt;/&lt;span class="hljs-name">Root&lt;/span>&gt;&lt;/span>&lt;/span>,
  &lt;span class="hljs-built_in">document&lt;/span>.getElementById(&lt;span class="hljs-string">'root'&lt;/span>)
);
`

src/Root.js

`&lt;span class="hljs-keyword">import&lt;/span> React &lt;span class="hljs-keyword">from&lt;/span> &lt;span class="hljs-string">'react'&lt;/span>;

&lt;span class="hljs-keyword">export&lt;/span> &lt;span class="hljs-keyword">default&lt;/span> &lt;span class="hljs-class">&lt;span class="hljs-keyword">class&lt;/span> &lt;span class="hljs-title">Root&lt;/span> &lt;span class="hljs-keyword">extends&lt;/span> &lt;span class="hljs-title">React&lt;/span>.&lt;span class="hljs-title">Component&lt;/span> &lt;/span>{
  render() {
    &lt;span class="hljs-keyword">return&lt;/span> (
      &lt;span class="xml">&lt;span class="hljs-tag">&lt;&lt;span class="hljs-name">div&lt;/span> &lt;span class="hljs-attr">style&lt;/span>=&lt;span class="hljs-string">{{textAlign:&lt;/span> '&lt;span class="hljs-attr">center&lt;/span>'}}&gt;&lt;/span>
        &lt;span class="hljs-tag">&lt;&lt;span class="hljs-name">h1&lt;/span>&gt;&lt;/span>Hello World&lt;span class="hljs-tag">&lt;/&lt;span class="hljs-name">h1&lt;/span>&gt;&lt;/span>
      &lt;span class="hljs-tag">&lt;/&lt;span class="hljs-name">div&lt;/span>&gt;&lt;/span>&lt;/span>);
  }
}
`

效果如下:

参考链接: