關於React的入門級安裝和最淺顯解釋

來源:互聯網
上載者:User

標籤:

春節臨近,辦公室裡半片空位,半片浮囂。

想到將放假,螢幕上的代碼也都變成了雀躍的小蟲。

無法專心了。

終於還是強迫自己讀了半篇文檔,寫了幾坨程式。

這次記錄的是關於React,最淺顯的內容。

 

———— 我是望眼欲穿的分割線 ————

 

Step 1:npm init

按照嚮導填寫各個欄位,最後產生package.json檔案。

容易出錯的是:name的值不要和包包同名

比如我們後續需要使用npm安裝幾個包包:browserify react reactify ...

則name值如果寫作“browserify”或“react”,此依賴會安裝失敗!

提示如下:

npm WARN install Refusing to install react as a dependency of itself

在OS X裡一個依賴安裝失敗會Block其他依賴的安裝,

Ubuntu裡只會失敗當前包的安裝,不會Block其他包。

總之,name不要和包名等關鍵字重名就對了。

 

Step 2:npm install --save-dev blah blah blah

package.json檔案完成後,即可安裝所需的依賴了:

sudo npm install --save-dev browserify react reactify react-dom uglify-js

這裡的安裝不要使用全域(-g)安裝。只裝在目前的目錄裡即可。

多個依賴之間是空格。

安裝成功後,需要手動在package.json檔案裡的scripts屬性中做個配置:

(假設package.json檔案裡的main檔案是index.js)

"build": "browserify --debug index.js > myBundle.js",

"build-dist": "NODE_ENV=production browserify index.js | uglifyjs -m > myBundle.min.js",

browserify 是一個JS檔案的打包工具,網上很多介紹,此不贅述。

任何包含require語句的JavaScript檔案運行Browserify都會自動打包所有的依賴項。

只不過它只支援.js檔案。很專一。

這個Step還沒完,在package.json裡還要添加一個屬性:

"browserify": {
  "transform": [
    "reactify"
  ]
}

好了,這個Step完了。

 

Step 3:npm run build 

這個命令就建立了打包檔案myBundle.js。

然後在index.html頁面裡引用之即可。

接下來,對index.js的每一次修改,都要run一次,頁面才會有更新。

補充半句,

webpack也可以完成browserify的任務,

並且它不僅僅支援.js檔案,很強大。不解釋了。

 

Step 4:現在可以在index.js裡美美的寫React代碼了

先require:

var React = require("react");

var ReactDOM = require(‘react-dom‘);

初次接觸React代碼對於用慣了jQuery的人來說不適應。

但如果寫過AngularJS就容易接受了。

不僅想起了兩年前寫AngularJS時的痛苦,一身冷汗!

好在經過修鍊,再新奇的JS寫起來也不再冒冷汗了。

複述有助於自我理解,以下是對原理的通俗解釋,可忽略:

jQuery對事件的監聽會綁定在DOM元素上,

事件每次發生,都會對DOM有所動作。

而React通過“狀態”來監聽事件,每當事件發生時,狀態改變,

然後在render屬性裡將最新狀態渲染到頁面上。

因此,React會通過建立UI組件,

將事件監聽、狀態修改、DOM結構都整合在一個組件裡,

對於需要多個組件的大型WEB應用來說,這種結構更方便維護。

 

Step 5:React.createClass({ ... })建立UI組件

其中一個內建屬性 getInitialState 要初始化各個“狀態”:

注意這個函數每次建立組件時只運行一次。

getInitialState: function() {

  return {

    text: "",

    closed: false

  }

}

然後我們可以自訂自己的監聽函數,比如:

myHandleChange: function(event) {

  this.setState({

    text: event.target.value,

    closed: true

  })

}

每次執行myHandleChange函數時都會在setState裡更新狀態

這裡是重寫了text的值和closed的值。

如何觸發myHandleChange函數,就不是React的問題了,

比如將其寫在input元素的onChange屬性裡就可以在輸入時觸發。

 

Step 6:最後將UI組件render到頁面裡

ReactDOM.render(<TweetBox />, document.body);

render函數接收的兩個參數,一個是帶尖角括弧的組件變數名,

另一個是容器,這裡是document.body

但似乎官方不建議直接使用body作容器,

最好建立一個body下的容器元素。

 

Step 7:render函數裡奇異的return

這個要單獨提出來講一下,是因我個人看它不順眼。。。

在render函數裡的return返回的是一段HTML結構,

但它的寫法既不同於JS原生文法,也不遵循HTML文法,

據說這貨叫作JSX什麼的,Whatever。

總之,這裡要注意的是4點:

a:return 後面的內容都放在小括弧裡

b:這段HTML結構必須包含在一個最外層元素中,不可出現兩個並列的最外層元素。

c:結構裡的class要寫成“className”

d:引用組件內的變數時,不要帶引號,例如 onChange={this.myHandleChange}

 

———— 我是赤裸裸的分割線 ————

 

以上是最淺顯的內容。

但也足夠支援我寫一坨小程式了。

準備放假了呢。

 

關於React的入門級安裝和最淺顯解釋

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.