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

一、React介紹

1.React的起源與發展
  • React 起源于 Facebook 的內部項目,因為該公司對市場上所有 JavaScript MVC 框架,都不滿意,就決定自己寫一套,用來架設 Instagram 的網站。

  • 做出來以后,發現這套東西很好用,就在2013年5月開源了。

  • 由于 React 的設計思想極其獨特,屬于革命性創新,性能出眾,代碼邏輯卻非常簡單。所以,越來越多的人開始關注和使用,認為它可能是將來 Web 開發的主流工具。

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

  • 虛擬 DMO 機制(Virtual DOM):這是 React 的一個亮點,可以很好地優化視圖的渲染和刷新。過去我們更新視圖是,需要先清空 DOM 容器里的內容,然后將最新的 DOM 和數據追加到容器中。而 React 將這一操作放進了內存。通過將視圖變化放進內存進行比較(虛擬 DOM 比較),計算出最小更新的視圖,然后將差異部分進行更新以完成整個組件的渲染。這正是React 如此高效的原因。

  • 數據流(Data Flow):React 實現了單向的數據流,并且對于傳統的數據綁定而言,React 更加靈活、便捷。

3,網站地址

二、準備工作

在使用 ReactJS 進行開發前,我們需要準備好這三個 js 文件:react.js、react-dom.js、browser.js。下面分別對它們進行介紹。
1. react.js 和 react-dom.js
前者是 React 主要核心,后者負責 React DOM 操作。可以訪問下面地址下載最新版本:
https://github.com/facebook/react/releases
2. browser.js
實現瀏覽器端對 JSX 的編譯。(在 react 0.14 前,使用 jsxtransformer.js,后改為 browser.js)
由于 browser.js 非常大,我們開發測試可以引用如下地址:
https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.24/browser.min.js
這種運行時解析轉換 JSX 建議只在開發測試時使用。生產環境下可以借助編譯工具(babel)事先將 JSX 編譯成 JS。這樣代碼經過預編譯、壓縮和合并后,會提高網絡的加載速度,減少流量帶寬的浪費,優化用戶體驗。

三、使用樣例

1. 簡單組件和數據傳遞
我們可以使用 this.props 來做簡單的數據傳遞。
(1)樣例說明
定義了一個組件 HelloMessage。通過傳入的 name 屬性,用于 h1 標簽渲染。
使用 ReactDOM.render 方法將組件渲染到 id 為 example 的 div 內。

<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 調試工具可以看到渲染后內文檔內容如下。

QQ截圖20170911175115.png

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

  • getInitialState:設置組件的初始狀態,必須返回一個對象或 null 對象。我們可以在此準備組件需要的數據以及后期需要更新的數據模型。
  • componentDidMount:組件加載完成時調用。這里我們創建一個定時器,定時改變 this.state 里的數據。
  • render:該方法用來渲染視圖。this.state 發生改變時,該方法會自動調用。
  • componentWillUnmount:組件被卸載時調用。我們在這里清除定時器 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({
          /*初始狀態*/
          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>現在已經過去了: {this.state.secondsElapsed}秒</div>
              );
          }
      });
      ReactDOM.render(<Timer />, document.getElementById('example'));
  </script>
</body>
</html>

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

QQ截圖20170911175645.png

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

  • 我們在 textarea 上綁定了 onChange 的事件監聽,目的是通過 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 中輸入內容后,下方的 div 中會同步顯示出輸入的內容文字。

QQ截圖20170911180104.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,622評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,716評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,746評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,991評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,706評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,036評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,029評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,203評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,725評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,451評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,677評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,161評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,857評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,266評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,606評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,407評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,643評論 2 380

推薦閱讀更多精彩內容

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