天天看點

React-Native(三):React Native是基于React設計的

react native是基于react js設計的。

  參考:《react 入門執行個體教程》

  react 起源于 facebook 的内部項目,因為該公司對市場上所有 javascript mvc 架構,都不滿意,就決定自己寫一套,用來架設 instagram 的網站。做出來以後,發現這套東西很好用,就在2013年5月開源了。

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

  這個項目本身也越滾越大,從最早的ui引擎變成了一整套前後端通吃的 web app 解決方案。衍生的 react native 項目,目标更是宏偉,希望用寫 web app 的方式去寫 native app。如果能夠實作,整個網際網路行業都會被颠覆,因為同一組人隻需要寫一次 ui ,就能同時運作在伺服器、浏覽器和手機(參見《也許,dom 不是答案》)。

如何使用呢?這裡引用《阮一峰的網絡日志-react 入門執行個體教程》中的10個react js的用法為例來學習:

關于代碼包:https://github.com/ruanyf/react-demos

1)reactdom.render 是 react 的最基本方法,用于将模闆轉為 html 語言,并插入指定的 dom 節點。

React-Native(三):React Native是基于React設計的

2)html 語言直接寫在 javascript 語言之中,不加任何引号,這就是 jsx 的文法,它允許 html 與 javascript 的混寫

React-Native(三):React Native是基于React設計的
React-Native(三):React Native是基于React設計的

3)react 允許将代碼封裝成元件(component),然後像插入普通 html 标簽一樣,在網頁中插入這個元件。react.createclass 方法就用于生成一個元件類

React-Native(三):React Native是基于React設計的

4)<code>this.props</code> 對象的屬性與元件的屬性一一對應,但是有一個例外,就是 <code>this.props.children</code> 屬性。它表示元件的所有子節點

React-Native(三):React Native是基于React設計的

5)元件的屬性可以接受任意值,字元串、對象、函數等等都可以。有時,我們需要一種機制,驗證别人使用元件時,提供的參數是否符合要求。

元件類的<code>proptypes</code>屬性,就是用來驗證元件執行個體的屬性是否符合要求

React-Native(三):React Native是基于React設計的

6)元件并不是真實的 dom 節點,而是存在于記憶體之中的一種資料結構,叫做虛拟 dom (virtual dom)。隻有當它插入文檔以後,才會變成真實的 dom 。根據 react 的設計,所有的 dom 變動,都先在虛拟 dom 上發生,然後再将實際發生變動的部分,反映在真實 dom上,這種算法叫做 dom diff ,它可以極大提高網頁的性能表現。

但是,有時需要從元件擷取真實 dom 的節點,這時就要用到 <code>ref</code> 屬性

React-Native(三):React Native是基于React設計的

7)this.state:元件免不了要與使用者互動,react 的一大創新,就是将元件看成是一個狀态機,一開始有一個初始狀态,然後使用者互動,導緻狀态變化,進而觸發重新渲染 ui

React-Native(三):React Native是基于React設計的

8)表單:使用者在表單填入的内容,屬于使用者跟元件的互動,是以不能用 <code>this.props</code> 讀取

,文本輸入框的值,不能用 <code>this.props.value</code> 讀取,而要定義一個 <code>onchange</code> 事件的回調函數,通過<code>event.target.value</code> 讀取使用者輸入的值。<code>textarea</code> 元素、<code>select</code>元素、<code>radio</code>元素都屬于這種情況,更多介紹請參考官方文檔。

React-Native(三):React Native是基于React設計的

9)元件的生命周期分成三個狀态:

mounting:已插入真實 dom updating:正在被重新渲染 unmounting:已移出真實 dom

react 為每個狀态都提供了兩種處理函數,<code>will</code> 函數在進入狀态之前調用,<code>did</code> 函數在進入狀态之後調用,三種狀态共計五種處理函數。

componentwillmount() componentdidmount() componentwillupdate(object nextprops, object nextstate) componentdidupdate(object prevprops, object prevstate) componentwillunmount()

此外,react 還提供兩種特殊狀态的處理函數。

componentwillreceiveprops(object nextprops):已加載元件收到新的參數時調用 shouldcomponentupdate(object nextprops, object nextstate):元件判斷是否重新渲染時調用

這些方法的詳細說明,可以參考官方文檔。

React-Native(三):React Native是基于React設計的

10)ajax:元件的資料來源,通常是通過 ajax 請求從伺服器擷取,可以使用 <code>componentdidmount</code> 方法設定 ajax 請求,等到請求成功,再用 <code>this.setstate</code> 方法重新渲染 ui 

React-Native(三):React Native是基于React設計的

上面代碼使用 jquery 完成 ajax 請求,這是為了便于說明。react 本身沒有任何依賴,完全可以不用jquery,而使用其他庫。

我們甚至可以把一個promise對象傳入元件。

上面代碼從github的api抓取資料,然後将promise對象作為屬性,傳給<code>repolist</code>元件。

如果promise對象正在抓取資料(pending狀态),元件顯示"正在加載";如果promise對象報錯(rejected狀态),元件顯示報錯資訊;如果promise對象抓取資料成功(fulfilled狀态),元件顯示擷取的資料。

React-Native(三):React Native是基于React設計的

基礎才是程式設計人員應該深入研究的問題,比如:

1)list/set/map内部組成原理|差別

2)mysql索引存儲結構&amp;如何調優/b-tree特點、計算複雜度及影響複雜度的因素。。。

3)jvm運作組成與原理及調優

4)java類加載器運作原理

5)java中gc過程原理|使用的回收算法原理

6)redis中hash一緻性實作及與hash其他差別

7)java多線程、線程池開發、管理lock與synchroined差別

8)spring ioc/aop 原理;加載過程的。。。

【+加關注】。