React - 功能介紹、安裝配置說明(附幾個簡單的入門樣例)

一盒刚、React介紹

1.React的起源與發(fā)展
  • React 起源于 Facebook 的內(nèi)部項目腺劣,因為該公司對市場上所有 JavaScript MVC 框架,都不滿意因块,就決定自己寫一套橘原,用來架設(shè) Instagram 的網(wǎng)站。

  • 做出來以后涡上,發(fā)現(xiàn)這套東西很好用趾断,就在2013年5月開源了。

  • 由于 React 的設(shè)計思想極其獨特吩愧,屬于革命性創(chuàng)新芋酌,性能出眾,代碼邏輯卻非常簡單耻警。所以隔嫡,越來越多的人開始關(guān)注和使用甸怕,認(rèn)為它可能是將來 Web 開發(fā)的主流工具甘穿。

2 .React的特點
  • 只作為 UI(Just the UI):React 不是一個完整的 MVC 框架,最多是作為視圖(View)在 MVC 中使用梢杭。(甚至 React 并不非常認(rèn)可 MVC 開發(fā)模式温兼。它提出的是一個新的開發(fā)模式和理念,強調(diào)的是“用戶界面”武契。React 希望將功能分解化募判,讓開發(fā)變得像搭積木一樣,快速且可維護(hù)咒唆。)

  • 虛擬 DMO 機制(Virtual DOM):這是 React 的一個亮點届垫,可以很好地優(yōu)化視圖的渲染和刷新。過去我們更新視圖是全释,需要先清空 DOM 容器里的內(nèi)容装处,然后將最新的 DOM 和數(shù)據(jù)追加到容器中。而 React 將這一操作放進(jìn)了內(nèi)存浸船。通過將視圖變化放進(jìn)內(nèi)存進(jìn)行比較(虛擬 DOM 比較)妄迁,計算出最小更新的視圖,然后將差異部分進(jìn)行更新以完成整個組件的渲染李命。這正是React 如此高效的原因登淘。

  • 數(shù)據(jù)流(Data Flow):React 實現(xiàn)了單向的數(shù)據(jù)流,并且對于傳統(tǒng)的數(shù)據(jù)綁定而言封字,React 更加靈活黔州、便捷耍鬓。

3,網(wǎng)站地址

二流妻、準(zhǔn)備工作

在使用 ReactJS 進(jìn)行開發(fā)前界斜,我們需要準(zhǔn)備好這三個 js 文件:react.js、react-dom.js合冀、browser.js各薇。下面分別對它們進(jìn)行介紹。
1. react.js 和 react-dom.js
前者是 React 主要核心君躺,后者負(fù)責(zé) React DOM 操作峭判。可以訪問下面地址下載最新版本:
https://github.com/facebook/react/releases
2. browser.js
實現(xiàn)瀏覽器端對 JSX 的編譯棕叫。(在 react 0.14 前林螃,使用 jsxtransformer.js,后改為 browser.js)
由于 browser.js 非常大俺泣,我們開發(fā)測試可以引用如下地址:
https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.24/browser.min.js
這種運行時解析轉(zhuǎn)換 JSX 建議只在開發(fā)測試時使用疗认。生產(chǎn)環(huán)境下可以借助編譯工具(babel)事先將 JSX 編譯成 JS。這樣代碼經(jīng)過預(yù)編譯伏钠、壓縮和合并后横漏,會提高網(wǎng)絡(luò)的加載速度,減少流量帶寬的浪費熟掂,優(yōu)化用戶體驗缎浇。

三、使用樣例

1. 簡單組件和數(shù)據(jù)傳遞
我們可以使用 this.props 來做簡單的數(shù)據(jù)傳遞赴肚。
(1)樣例說明
定義了一個組件 HelloMessage素跺。通過傳入的 name 屬性,用于 h1 標(biāo)簽渲染誉券。
使用 ReactDOM.render 方法將組件渲染到 id 為 example 的 div 內(nèi)指厌。

<html>
<head lang="en">   
<meta charset="UTF-8">   
<title>簡書</title>
<script src="https://cdn.bootcss.com/react/15.6.1/react.js"></script>
<script src="https://cdn.bootcss.com/react/15.6.0/react-dom.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.24/browser.min.js"></script>
</head>
<body>   
<div id="example">
   
</div>
<script type="text/babel">
    var HelloMessage = React.createClass({
        render: function() {
                return<h1>歡迎訪問 {this.props.name}</h1>;
           }  
});
    ReactDOM.render(
          <HelloMessage name="jianshu.com" />,
          document.getElementById('example'));

  </script>

</body>

</html>

(2)運行效果


QQ截圖20170911174928.png

(3)使用 Chrome 調(diào)試工具可以看到渲染后內(nèi)文檔內(nèi)容如下。

QQ截圖20170911175115.png

2. 通過this.state更新視圖
(1)樣例說明

  • getInitialState:設(shè)置組件的初始狀態(tài)踊跟,必須返回一個對象或 null 對象踩验。我們可以在此準(zhǔn)備組件需要的數(shù)據(jù)以及后期需要更新的數(shù)據(jù)模型。
  • componentDidMount:組件加載完成時調(diào)用琴锭。這里我們創(chuàng)建一個定時器晰甚,定時改變 this.state 里的數(shù)據(jù)。
  • render:該方法用來渲染視圖决帖。this.state 發(fā)生改變時厕九,該方法會自動調(diào)用。
  • componentWillUnmount:組件被卸載時調(diào)用地回。我們在這里清除定時器 this.interval扁远。
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>簡書</title>
    <script src="https://cdn.bootcss.com/react/15.6.1/react.js"></script>
    <script src="https://cdn.bootcss.com/react/15.6.0/react-dom.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.24/browser.min.js"></script>
</head>
<body>
  <div id="example"></div>
  <script type="text/babel">
      var Timer = React.createClass({
          /*初始狀態(tài)*/
          getInitialState: function() {
              return {secondsElapsed: 0};
          },
          tick: function() {
              this.setState({secondsElapsed: this.state.secondsElapsed + 1});
          },
          /*組件完成加載*/
          componentDidMount: function() {
              this.interval = setInterval(this.tick, 1000);
          },
          /*組件將被卸載*/
          componentWillUnmount: function() {
              clearInterval(this.interval);
          },
          render: function() {
              return (
                      <div>現(xiàn)在已經(jīng)過去了: {this.state.secondsElapsed}秒</div>
              );
          }
      });
      ReactDOM.render(<Timer />, document.getElementById('example'));
  </script>
</body>
</html>

(2)運行效果俊鱼。每隔一秒鐘,secondsElapsed 就會加 1畅买。同時頁面也會自動刷新并闲。

QQ截圖20170911175645.png

3,稍微復(fù)雜一點樣例
(1)樣例說明

  • 我們在 textarea 上綁定了 onChange 的事件監(jiān)聽谷羞,目的是通過 setState 改變this.state.value帝火。
  • 同時 textarea 上添加了 ref 屬性,這樣就可以通過 this.refs.testarea 引用這個 textarea 對象了湃缎。
  • 通過 ReactDOM 提供的 findDOMNode 方法犀填,可以找到 React 的 DOM。
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>簡書</title>
    <script src="https://cdn.bootcss.com/react/15.6.1/react.js"></script>
   <script src="https://cdn.bootcss.com/react/15.6.0/react-dom.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.24/browser.min.js"></script>
</head>
<body>
  <div id="example"></div>
  <script type="text/babel">
    var ShowEditor = React.createClass({
        getInitialState: function() {
            return {value: '在這里輸入文字'};
        },
        handleChange: function() {
            this.setState({value: ReactDOM.findDOMNode(this.refs.textarea).value});
        },
        render: function() {
            return (
                <div>
                    <h3>輸入:</h3>
                    <textarea style={{width:300, height:150, outline:'none'}}
                        onChange={this.handleChange}
                        ref="textarea"
                        defaultValue={this.state.value} />
                    <h3>輸出:</h3>
                    <div>
                        {this.state.value}
                    </div>
                </div>
            );
        }
    });
    ReactDOM.render(<ShowEditor />, document.getElementById('example'));
  </script>
</body>
</html>

(2)運行效果嗓违。在上方的 textarea 中輸入內(nèi)容后九巡,下方的 div 中會同步顯示出輸入的內(nèi)容文字。

QQ截圖20170911180104.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蹂季,一起剝皮案震驚了整個濱河市冕广,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌偿洁,老刑警劉巖撒汉,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異父能,居然都是意外死亡神凑,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門何吝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鹃唯,你說我怎么就攤上這事爱榕。” “怎么了坡慌?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵黔酥,是天一觀的道長。 經(jīng)常有香客問我洪橘,道長跪者,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任熄求,我火速辦了婚禮渣玲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘弟晚。我一直安慰自己忘衍,他們只是感情好逾苫,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著枚钓,像睡著了一般铅搓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上搀捷,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天星掰,我揣著相機與錄音,去河邊找鬼嫩舟。 笑死蹋偏,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的至壤。 我是一名探鬼主播威始,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼像街!你這毒婦竟也來了黎棠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤镰绎,失蹤者是張志新(化名)和其女友劉穎脓斩,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體畴栖,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡随静,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了吗讶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片燎猛。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖照皆,靈堂內(nèi)的尸體忽然破棺而出重绷,到底是詐尸還是另有隱情,我是刑警寧澤膜毁,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布昭卓,位于F島的核電站,受9級特大地震影響瘟滨,放射性物質(zhì)發(fā)生泄漏候醒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一杂瘸、第九天 我趴在偏房一處隱蔽的房頂上張望倒淫。 院中可真熱鬧,春花似錦胧沫、人聲如沸昌简。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纯赎。三九已至谦疾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間犬金,已是汗流浹背念恍。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留晚顷,地道東北人峰伙。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像该默,于是被迫代替她去往敵國和親瞳氓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

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

  • 原教程內(nèi)容詳見精益 React 學(xué)習(xí)指南栓袖,這只是我在學(xué)習(xí)過程中的一些閱讀筆記匣摘,個人覺得該教程講解深入淺出,比目前大...
    leonaxiong閱讀 2,834評論 1 18
  • React 入門實例教程 轉(zhuǎn)載(加入了自己的一些東西裹刮,推薦看原文):一看就懂的ReactJs入門教程(精華版) ...
    驀然之間的閱讀 403評論 0 0
  • 最近看了一本關(guān)于學(xué)習(xí)方法論的書音榜,強調(diào)了記筆記和堅持的重要性。這幾天也剛好在學(xué)習(xí)React捧弃,所以我打算每天堅持一篇R...
    gaoer1938閱讀 1,678評論 0 5
  • 自己最近的項目是基于react的赠叼,于是讀了一遍react的文檔,做了一些記錄(除了REFERENCE部分還沒開始讀...
    潘逸飛閱讀 3,383評論 1 10
  • 我的好友小王站在鏡子面前搗鼓發(fā)型 我拿著梳子擠到小王面前梳起頭發(fā)來 小王看著臭美的我說违霞,這...么好看 我樂得就像...
    小八的幽默閱讀 328評論 0 0