React與ES6(一)開篇介紹

React與ES6系列:

  1. React與ES6(一)開篇介紹
  2. React和ES6(二)ES6的類和ES7的property initializer
  3. React與ES6(三)ES6類和方法綁定
  4. React與ES6(四)ES6如何處理React mixins

ES2015(也就是ES6)帶來了很多新的語言特性。比如:類、箭頭方法秘蛇、rest參數(shù)、promise剧蹂、generator等很多功炮。如果你對ES6還不是很熟悉的話可以看這里

但是瀏覽器對于ES6的支持還不是很好题造。你可以看看這個ES6兼容表鹦赎。顯而易見的是不同瀏覽器對于ES6的兼容參差不齊谍椅。于是就有人想把ES6的代碼轉(zhuǎn)成ES5的不就可以兼容了嗎。

這其中做的最好的就是Babel, 一個非常棒的工具古话。后面會詳細(xì)的介紹如何使用雏吭。

準(zhǔn)備開發(fā)環(huán)境

為了可以正常開發(fā),那么就需要用到webpack陪踩。這個工具可以把模塊和相關(guān)的依賴項都打包到一起思恐。之后,只要在瀏覽器中引用打包的腳本膊毁。

  1. 首先你需要安裝nodejs胀莹。如果你還沒有安裝的話,直接去官網(wǎng)下載最新的安裝包安裝即可婚温。
  2. 接下來安裝webpack描焰。npm install webpack --save-dev
  3. 安裝babel-loader栅螟。npm install babel-loader babel-preset-es2015 babel-preset-react --save荆秦。有了babel-loader和對應(yīng)的preset,就可以把ES6的代碼轉(zhuǎn)換為ES5了力图。但是步绸,之前還需要配置babel-loader
  4. 安裝react以及相關(guān)包吃媒。npm install react react-dom --save瓤介。

下面就是babel-loaderwebpack的配置吕喘。首先配置babel-loader否則webpack無法使用babel轉(zhuǎn)碼。

在根目錄添加文件.babelrc刑桑,并在提其中添加如下內(nèi)容:

{
    "presets": ["es2015", "react"]
}

接下來配置webpack氯质。在根目錄創(chuàng)建文件webpack.config.js, 之后在文件中添加如下代碼:

var webpack = require('webpack');
var path = require('path');

var BUILD_DIR = path.resolve(__dirname, 'src/client/public');
var APP_DIR = path.resolve(__dirname, 'src/client/app');

var config = {
  entry: APP_DIR + '/index.jsx',
  output: {
      path: BUILD_DIR,
      filename: 'bundle.js'
  },
  module: {
      loaders: [
          {
              test: /\.jsx?/,
              include: APP_DIR,
              loader: 'babel'
          }
      ]
  }
};

module.exports = config;

最后,在package.json文件中的scripts節(jié)點下添加如下內(nèi)容:

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "webpack -d --watch",
    "build": "webpack -p"
},

現(xiàn)在可以運行命令npm run dev開始開發(fā)祠斧,這時webpack會監(jiān)視源代碼的改變闻察,任何對源代碼的修改都會觸發(fā)重新打包的動作。

更多關(guān)于webpackbabel-loader的配置方面的內(nèi)容請移步這里琢锋。本文不再多做介紹辕漂。

JSX和Babel

你可能已經(jīng)注意到,我們使用的是.jsx后綴而不是js吴超。JSX是ReactJs團(tuán)隊開發(fā)的一個JavaScript的擴(kuò)展钉嘹。點擊這里查看更多關(guān)于JSX的內(nèi)容。

使用ES6寫第一個React組件

是不是已經(jīng)等不及了烛芬。

先來看看項目結(jié)構(gòu):

project
|--src
      |--client
           |--app
           |--public
           |--index.html
|--.babelrc
|--package.json
|--webpack.config.js

app目錄下創(chuàng)建一個文件index.jsx作為React項目的入口文件。之后添加hello-world.jsx文件飒责。在其中添加如下代碼:

import React from 'react'; // 1

// 2
export default class HelloWorld extends React.Component {
    // 3
    render() {
        // 4
        return <h1>Hello from {this.props.phrase}</h1>
    }
}

解釋一下上面的代碼:

  1. 把React庫import引入到React變量中赘娄。
  2. 定義了一個我們自己的組件HelloWorld,這個組件繼承(extends)自React.Component宏蛉。注意:在類的前面還有關(guān)鍵字export default遣臼,在別的模塊中import并使用HelloWorld組件。
  3. 覆蓋React組件的render方法拾并。
  4. render方法返回JSX定義的html元素揍堰,這個元素內(nèi)部顯示的文本通過解析this.props.phrase獲得般贼。

組合到一起

在之前已經(jīng)創(chuàng)建好的index.js文件內(nèi)添加如下內(nèi)容:

import React from 'react';
import {render} from 'react-dom';

import HelloWorld from './hello-world';

class App extends React.Component {
    render() {
        return (<div>
            <HelloWorld phrase="ES2015" />
        </div>);
    }
}

render(<App />, document.getElementById('app'));

打開index.html文件单鹿,如果你還沒有創(chuàng)建這個文件的話孽水,那么創(chuàng)建一個焕数。目錄位置參考前面的項目目錄一節(jié)甘改。在index.html文件中添加如下內(nèi)容:

<html>
  <head>
    <meta charset="utf-8">
    <title>React & ES6</title>
  </head>
  <body>
    <div id="app" />
    <script src="public/bundle.js" type="text/javascript"></script>
  </body>
</html>

所需要的全部材料都有了√沟叮現(xiàn)在就可以用webpack打包了失晴。運行命令npm run dev恨樟,稍后js代碼就會轉(zhuǎn)碼褪那,打包到bundle.js文件中了幽纷。

在瀏覽器中打開這個html文件。你就會看到運行結(jié)果了博敬。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末友浸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子偏窝,更是在濱河造成了極大的恐慌收恢,老刑警劉巖武学,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異派诬,居然都是意外死亡劳淆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門默赂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沛鸵,“玉大人,你說我怎么就攤上這事缆八∏” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵奈辰,是天一觀的道長栏妖。 經(jīng)常有香客問我,道長奖恰,這世上最難降的妖魔是什么吊趾? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮瑟啃,結(jié)果婚禮上论泛,老公的妹妹穿的比我還像新娘。我一直安慰自己蛹屿,他們只是感情好屁奏,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著错负,像睡著了一般坟瓢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上犹撒,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天折联,我揣著相機與錄音,去河邊找鬼识颊。 笑死崭庸,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的谊囚。 我是一名探鬼主播怕享,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼镰踏!你這毒婦竟也來了函筋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤奠伪,失蹤者是張志新(化名)和其女友劉穎跌帐,沒想到半個月后首懈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡谨敛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年究履,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脸狸。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡最仑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出炊甲,到底是詐尸還是另有隱情泥彤,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布卿啡,位于F島的核電站吟吝,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏颈娜。R本人自食惡果不足惜剑逃,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望官辽。 院中可真熱鬧蛹磺,春花似錦、人聲如沸野崇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽乓梨。三九已至,卻和暖如春清酥,著一層夾襖步出監(jiān)牢的瞬間扶镀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工焰轻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留臭觉,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓辱志,卻偏偏與公主長得像蝠筑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子揩懒,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容