[譯] React 入門指南,react入門指南

來源:互聯網
上載者:User

[譯] React 入門指南,react入門指南

原文連結:The React Quick Start Guide

這篇文章將概括性的介紹一下如何用 ReactJS 進行開發。我將介紹一些基礎知識,不會有過於深入的分析。你可以結合這些代碼閱讀本文。更新:本文已經由 Hugo Bessa 翻譯了葡萄牙語版。

一些概念

React 的 API 非常少,簡單易懂易用。在正式開始之前先介紹幾個概念,一個一個來。

React 元素 是表現為 HTML 元素的 JavaScript 對象,他們並不真實存在於瀏覽器中。他們最終表現為類似h1, divsection 之類的瀏覽器元素。

JSX 是一種建立 React 元素和 components 的技術。例如 <h1>Hello</h1> 是一個用 JSX 寫的 React 元素。同樣可以用純 JavaScript 寫成 React.DOM.h1(null, 'Hello');。JSX 讀寫起來更輕鬆,最終上線之前必須將 JSX 語句轉為 JavaScript 語句。

虛擬DOM 是由 React 元素和 components 組成的 JavaScript 樹形結構對象。React 將虛擬 DOM 渲染到瀏覽器中變成最終的使用者介面。React 會觀察虛擬 DOM 的變化,並自動將這些變化渲染到瀏覽器端。

理解了上面這些概念,我們可以開始使用 React 寫一些例子了。下面會開發一系列功能,每一個例子都是在前一個例子的基礎上進行改進。我們會編寫一個類似 instagram 的照片流程式 - 沒有比這更好的樣本程式了。

渲染

第一步是渲染虛擬元素(React 元素或 component)。注意,虛擬元素只存在於記憶體中,必須顯式地告訴 React 將它渲染到瀏覽器上。

React.render(<img src='http://tinyurl.com/lkevsb9' />, document.body)

查看 JSBin

render 函數接收兩個參數:虛擬元素和真實的瀏覽器 DOM 元素。React 將虛擬元素插入到指定的 DOM 元素中。上例中可以看到圖片被渲染出來了。

組件(Components)

組件是 React 的精髓所在。它們是自訂的 React 元素,通常有一些功能和結構定義。

var Photo = React.createClass({  render: function() {    return <img src='http://tinyurl.com/lkevsb9' />  }});React.render(<Photo />, document.body);

查看 JSBin

createClass 函數接收一個對象,這個對象實現了 render 方法。

這個Photo組件定義了 <Photo />元素,並且渲染到 document.body 裡。

這個組件跟之前的渲染圖片沒有太大區別,但是它為將來添加自訂功能奠定了基礎。

屬性(Props)

可以把屬性看做組件的配置參數,看起來非常像 HTML 屬性。

var Photo = React.createClass({  render: function() {    return (      <div className='photo'>        <img src={this.props.imageURL} />        <span>{this.props.caption}</span>        </div>    );    }});React.render(<Photo imageURL='http://tinyurl.com/lkevsb9' caption='Hong Kong!' />, document.body);

查看 JSBin

imageURLcaption 兩個屬性被傳遞到 Photo 組件內的 render 函數裡。

imageURL 被用在 React 圖片元素的 src 屬性,caption 被用作 React span 元素內的文本。

組件不會改變它的屬性,他們是靜止不變的。如果組件裡包含動態資料,就要用到狀態(State)對象。

狀態(State)

狀態物件用來記錄隨時可能變化的資料。

var Photo = React.createClass({  toggleLiked: function() {    this.setState({      liked: !this.state.liked    });  },  getInitialState: function() {    return {      liked: false    };  },  render: function() {    var buttonClass = this.state.liked ? 'active' : '';    return (      <div className='photo'>        <img src={this.props.src} />        <div className='bar'>          <button onClick={this.toggoleLiked} className={buttonClass}>                      </button>          <span>{this.props.caption}</span>        </div>      </div>    );  }});React.render(<Photo src='http://tinyurl.com/lkevsb9' caption='Hong Kong!') />, document.body);

查看 JSBin

組件的狀態給組件引入了一些複雜性。

這個組件有一個新的函數 getInitialState。 當組件初始化時 React 會去調用這個函數。根據它返回的對象來設定組件的初始狀態(正如函數名所表達的那樣)。

這個組件還有另一個新函數 toggleLiked。它調用了 setState 來切換 liked 的值。

render 函數裡有個 buttonClass 的變數,根據 liked 狀態被標記為 ‘active’ 或 空值。

buttonClass 被用作 React button 元素的類名。這個按鈕還將 toggleLiked 函數綁定到 onClick 事件上。

看看在瀏覽器中渲染出來是什麼效果:
- 當組件裡的按鈕被點擊時,觸發 toggleLiked 函數
- liked 狀態被改變
- React 重新渲染虛擬 DOM
- 新老虛擬 DOM 進行對比
- React 識別出變化的部分並渲染到瀏覽器

上例示範了點擊按鈕來改變類名

組合組件(Composition)

將一些小的組件(components)連結起來形成一個大的組合組件。例如 Photo 組件可以用在 PhotoGallery 組件中,如下:

var Photo = React.createClass({  toggleLiked: function() {    this.setState({      liked: !this.state.liked    });  },  getInitialState: function() {    return {      liked: false    };  },  render: function() {    var buttonClass = this.state.liked ? 'active' : '';    return (      <div className='photo'>        <img src={this.props.src} />        <div className='bar'>          <button onClick={this.toggleLiked} className={buttonClass}>                      </button>          <span>{this.props.caption}</span>        </div>      </div>    );  }});var PhotoGallery = React.createClass({  render: function() {    var photos = this.props.photos.map(function(photo) {      return <Photo src={photo.url} caption={photo.caption} />    });    return (      <div className='photo-gallery'>        {photos}      </div>    );  }});var data = [  {    url: 'http://tinyurl.com/lkevsb9',    caption: 'Hong Kong!'  },  {    url: 'http://tinyurl.com/mxkwh56',    caption: 'Cows'  },  {    url: 'http://tinyurl.com/nc7jv28',    caption: 'Scooters'  }];React.render(<PhotoGallery photos={data} />, document.body);

查看 JSBin

Photo 組件跟之前的沒什麼兩樣。新組件 PhotoGallery 根據 3 條假資料產生了 3 個 Photo 組件。

結語

本文只是一篇 React 入門,我強烈推薦大家去讀 React 官方文檔,裡麵包含了所有你想要的細節。

還有一些值得一看的視頻資源。Pete Hunt 講的 re-thinking web application architecture with React 和 Tom Occhino 講的 React Native for building native mobile applications with React (WIP)。

本文並沒有介紹如何設定你的本地開發環境,官方文檔有相關介紹,或者,你還可以看看我的解決方案 boilerplate。

如果本文有什麼錯誤之處,歡迎在 twitter 上聯絡我,或者給我提 pull request。盡情給我發郵件吧,我很樂意效勞。

P.S - 如果你準備開發一個更複雜的 React 應用,推薦 The Flux Quick Start Guide。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.