本文原創首發於公衆號:ReactNative開發圈,轉載需註明出處。react
本文會不按期不斷更新,想查看最新版本請移步至https://github.com/forrest23/react-native-interviewandroid
1.性能媲美原生APP 2.使用JavaScript編碼,只要學習這一種語言 3.絕大部分代碼安卓和IOS都能共用 4.組件式開發,代碼重用性很高 5.跟編寫網頁通常,修改代碼後便可自動刷新,不須要慢慢編譯,節省不少編譯等待時間 6.支持APP熱更新,更新無需從新安裝APPios
缺點: 內存佔用相對較高 版本還不穩定,一直在更新,如今尚未推出穩定的1.0版本git
生命週期 調用次數 可否使用 setSate() getDefaultProps 1(全局調用一次) 否 getInitialState 1 否 componentWillMount 1 是 render >=1 否 componentDidMount 1 是 componentWillReceiveProps >=0 是 shouldComponentUpdate >=0 否 componentWillUpdate >=0 否 componentDidUpdate >=0 否 componentWillUnmount 1 否github
當調用 setState 時,React會作的第一件事情是將傳遞給 setState 的對象合併到組件的當前狀態。 這將啓動一個稱爲和解(reconciliation)的過程。 和解(reconciliation)的最終目標是以最有效的方式,根據這個新的狀態來更新UI。 爲此,React將構建一個新的 React 元素樹(您能夠將其視爲 UI 的對象表示)。 一旦有了這個樹,爲了弄清 UI 如何響應新的狀態而改變,React 會將這個新樹與上一個元素樹相比較( diff )。 經過這樣作, React 將會知道發生的確切變化,而且經過了解發生什麼變化,只需在絕對必要的狀況下進行更新便可最小化 UI 的佔用空間。redux
1.無論是props仍是state的改變,都會引起render的從新渲染。 2.都能由自身組件的相應初始化函數設定初始值。react-native
不一樣點 1.初始值來源:state的初始值來自於自身的getInitalState(constructor)函數;props來自於父組件或者自身getDefaultProps(若key相同前者可覆蓋後者)。promise
2.修改方式:state只能在自身組件中setState,不能由父組件修改;props只能由父組件修改,不能在自身組件修改。安全
3.對子組件:props是一個父組件傳遞給子組件的數據流,這個數據流能夠一直傳遞到子孫組件;state表明的是一個組件內部自身的狀態,只能在自身組件中存在。服務器
其實這個問題也是跟reconciliation有關係。 「和解( reconciliation )的最終目標是以最有效的方式,根據新的狀態更新用戶界面」。 若是咱們知道咱們的用戶界面(UI)的某一部分不會改變, 那麼沒有理由讓 React 很麻煩地試圖去弄清楚它是否應該渲染。 經過從 shouldComponentUpdate 返回 false, React 將假定當前組件及其全部子組件將保持與當前組件相同
this.props.children 的值有三種可能: 1.當前組件沒有子節點,它就是 undefined; 2.有一個子節點,數據類型是 object ; 3.有多個子節點,數據類型就是 array 。 系統提供React.Children.map()方法安全的遍歷子節點對象
要實現RN的腳本熱更新,咱們要搞明白RN是如何去加載腳本的。 在編寫業務邏輯的時候,咱們會有許多個js文件,打包的時候RN會將這些個js文件打包成一個叫index.android.bundle(ios的是index.ios.bundle)的文件,全部的js代碼(包括rn源代碼、第三方庫、業務邏輯的代碼)都在這一個文件裏,啓動App時會第一時間加載bundle文件,因此腳本熱更新要作的事情就是替換掉這個bundle文件。
採用Flex佈局的元素,稱爲Flex容器(flex Container),簡稱"容器"。它的全部子元素自動成爲容器成員,稱爲Flex項目(flex item),簡稱"項目"。
容器默認存在兩根軸:水平的主軸(main axis)和垂直的交叉軸(cross axis)。主軸的開始位置(與邊框的交叉點)叫作main start,結束位置叫作main end;交叉軸的開始位置叫作cross start,結束位置叫作cross end。
項目默認沿主軸排列。單個項目佔據的主軸空間叫作main size,佔據的交叉軸空間叫作cross size。
容器的屬性 如下6個屬性設置在容器上。 flex-direction 屬性決定主軸的方向(即項目的排列方向)。 flex-wrap 屬性定義,若是一條軸線排不下,如何換行。 flex-flow flex-flow屬性是flex-direction屬性和flex-wrap屬性的簡寫形式。 justify-content 定義了項目在主軸上的對齊方式。 align-items 屬性定義項目在交叉軸上如何對齊。 align-content align-content屬性定義了多根軸線的對齊方式。若是項目只有一根軸線,該屬性不起做用。
code push 調用 react native 的打包命令,將當前環境的非 native 代碼全量打包成一個 bundle 文件,而後上傳到微軟雲服務器(Windows Azure)。 在 app 中啓動頁(或 splash 頁)編寫請求更新的代碼(請求包含了本地版本,hashCode、appToken 等信息),微軟服務端對比本地 js bundle 版本和微軟服務器的版本,若是本地版本低,就下載新的 js bundle 下來後實現更新(code push 框架實現)。
同步只返回一個普通 action 對象。而異步操做中途會返回一個 promise 函數。固然在 promise 函數處理完畢後也會返回一個普通 action 對象。thunk 中間件就是判斷若是返回的是函數,則不傳導給 reducer,直到檢測到是普通 action 對象,才交由 reducer 處理。
本文會不按期不斷更新,想查看最新版本請移步至https://github.com/forrest23/react-native-interview
本文題目節選自互聯網,若有侵權請聯繫我!
歡迎關注個人微信公衆號:ReactNative開發圈