iOS 和 Android 開發(fā)的 React Native 入門指南

前言

這一篇是給稍微有點原生(iOS 或者 Android)編程經(jīng)驗的人的一個系統(tǒng)性的 React Native 入門指南。主要總結(jié)的是我之前系統(tǒng)學(xué)習(xí) React Native 的經(jīng)驗。

我在很早的時候就接觸了 RN钱磅,但是剛開始那段時間基本處于一種瞎寫的狀態(tài)绿饵,不知道很多內(nèi)在原理铝条,導(dǎo)致我碰到問題各種谷歌、StackOverflow嘶朱,搜代碼特愿,拷貝粘貼代碼仲墨。然后又荒廢了一段時間,今年開始又重拾 RN洽议,有了之前的經(jīng)驗宗收,這次是比較系統(tǒng)的學(xué)習(xí)了漫拭。

先介紹一下我的情況:我是原生 iOS 開發(fā)亚兄,Objective C 3年經(jīng)驗,Swift 2年經(jīng)驗采驻。

路線

基本路線如下:

  1. 詳細了解 JavaScript
  2. 詳細了解 React
  3. 詳細了解 React Native
  4. 其他(比如說 Redux)

下面詳細介紹审胚。

JavaScript

關(guān)鍵是了解 JavaScript 的繼承和原型鏈機制,同時包括 JavaScript 的對象模型礼旅。

參考資料如下:(參考資料如果包含瀏覽器相關(guān)的內(nèi)容膳叨,可以忽略)

  1. MDN JavaScript
  2. ECMAScript 6 入門 或者 JavaScript 指南
  3. TypeScript 英文文檔中文版文檔

先從 MDN 的 JavaScript 教程開始看,這是 JavaScript 的基礎(chǔ)痘系,有一定編程經(jīng)驗在初級部分可以看的快一點菲嘴,但是關(guān)于 JavaScript 對象介紹繼承與原型鏈對象模型的細節(jié) 要詳細的看龄坪。

如果沒有頭緒昭雌,或者覺得跳著看思路跟不上,可以從頭到尾細看(我就是這么看的健田,但是我看的比較快烛卧,花了2天時間看完)

看完 MDN 的教程以后就可以看 ES6 相關(guān)內(nèi)容了。我看的是 ruanyifeng 的 ES6 網(wǎng)上教程妓局,不過也可以看 MDN 的 JavaScript 指南总放,兩者可以對比的看。我是看完 ruanyifeng 的教程之后又看了 MDN 的 JavaScript 指南好爬,由于看過 ruanyifeng 的 ES6局雄,所以 MDN 的 JavaScript 指南就可以快一點。我覺得這里比較關(guān)鍵的是理解 ES6 的模塊(Module)存炮,也就是這兩章:Module 的語法Module 的加載實現(xiàn)
哎榴,還有就是基本的 ES6 語法。

在看的過程中有些內(nèi)容可能不好懂僵蛛,完全可以跳過尚蝌,等后面寫代碼或者看代碼碰到的時候再回過頭來看,只要記住有這么一個東西即可充尉。有些內(nèi)容比較好懂飘言,或者理解一下就懂了,這時候可以對比一下和其他語言在這方面有哪些不同和相同(比如你是 Java 程序員驼侠,學(xué)習(xí) JavaScript姿鸿,就可以對比一下 Java 的繼承和 JavaScript 的繼承),這樣子可以加深你對 JavaScript 的理解倒源。

看完這些其實 JavaScript 已經(jīng)入門了苛预,不過我要特別提一下 TypeScript。由于 JavaScript 是弱類型語言笋熬,經(jīng)常代碼寫著寫著就不知道當(dāng)前函數(shù)的參數(shù)定義是什么热某。無論是 debug 還是閱讀代碼、寫代碼胳螟,不知道一個東西確定是什么是很痛苦的(你可以想象一下你寫的一個函數(shù)昔馋,有一個參數(shù),但是卻無法確定類型是什么糖耸,所以需要時刻在腦海中告訴自己這個參數(shù)的定義是這樣的秘遏,但是一不小心疏忽了,編輯器也沒有提醒你這里寫的有問題嘉竟,那只能在運行時發(fā)生問題才知道出了問題邦危,然后又要花一段時間去調(diào)試)洋侨。TypeScript 是微軟出的一個比較流行的解決這類問題的方案,就是給 JavaScript 加上 Type (類型)倦蚪。你也可以在一開始不用 TypeScript凰兑,但是等到你碰到很多上面提到的類似問題時,TypeScript 就是你的解決方案审丘。

React

我剛開始學(xué)習(xí) RN 的時候吏够,對 React 一無所知,直接根據(jù) React Native 的官方文檔來學(xué)習(xí)滩报。但是在越來越深入的寫 React Native 相關(guān)代碼的時候锅知,我發(fā)現(xiàn),了解 React 是很關(guān)鍵的脓钾。

對于喜歡立即上手的人來說售睹,可以先不看 React 相關(guān)的內(nèi)容,直接學(xué)習(xí) RN可训。但是在你寫了一定量的代碼以后昌妹,你會碰到一些問題,比如如何復(fù)用組件握截,如何處理一些不是很常見的操作飞崖,如何處理數(shù)據(jù)(展示組件和容器組件)等等,這時候你就可以開始去了解 React 了谨胞。

了解 React 當(dāng)然是官方文檔:

  1. React 中文文檔
  2. React 英文官方文檔

上面兩個內(nèi)容是一樣的固歪,喜歡中文的可以看中文,喜歡看英文的可以看英文胯努。

建議能夠全部看完所有內(nèi)容牢裳,不要忽略任何一個地方(如果是 Web 開發(fā)可以跳著看)。

當(dāng)然其實看完這文檔是不夠的叶沛,我覺得有時間一定要理解一下 React 的實現(xiàn)原理蒲讯。(我沒有看過 React 源碼,所以就不繼續(xù)說了)

React Native

說了那么多終于到 RN 這一部分了灰署。還是要強調(diào)一下判帮,學(xué)習(xí) RN 可以先不了解 JavaScript 和 React,(前提是你要有一點編程經(jīng)驗氓侧,如果是大神的話脊另,請隨意)喜歡立即上手的可以直接根據(jù)官方文檔上手导狡。不過要深入了解 RN约巷,則必須要了解 React 和 JavaScript。

學(xué)習(xí) RN 的時候主要就是看 官方英文文檔中文版)旱捧,一些環(huán)境依賴等根據(jù)官方文檔來操作即可独郎。

RN 需要關(guān)鍵了解使用的部分如下:

  1. FlexBox踩麦,一個前端布局的方式,寫界面的時候一定要了解這個氓癌,否則界面就寫不出來
  2. 各種 UI 組件的使用谓谦、屬性等,可以一邊寫代碼一邊學(xué)習(xí)使用
  3. 網(wǎng)絡(luò)請求贪婉,大部分 app 都會有網(wǎng)絡(luò)請求反粥,所以了解這個也很關(guān)鍵。有一個框架 axios 可以嘗試使用疲迂,這是一個 HTTP 客戶端框架才顿。
  4. 如何與原生代碼交互,iOS 相關(guān)文檔地址 iOS Native Modules尤蒿、iOS Native UI Components 郑气,Android 相關(guān)文檔 Android Native ModulesAndroid Native UI Components
  5. 數(shù)據(jù)存儲腰池,使用 RealmJS 或者原生的 AsyncStorage尾组,使用 RealmJS 的問題是,如果你的 iOS 原生項目已經(jīng)使用了 RealmSwift 等的話示弓,會導(dǎo)致符號沖突讳侨,無法通過編譯。

一些坑:

  1. 建議在原生項目上添加 RN 支持奏属,文檔地址集成到現(xiàn)有原生應(yīng)用爷耀。如果使用 create-react-native-app AwesomeProject 命令來生成一個 RN 項目,會引入 Expo 這種東西拍皮,我個人不建議使用此類框架歹叮。
  2. 不建議使用 NavigatorIOS 這類組件,推薦 React Navigation铆帽,但是這個開源組件坑也比較多咆耿,不過個人認為還是比 RN 提供的組件要好。

其他

Redux爹橱,Redux 是一個關(guān)于數(shù)據(jù)流的前端框架萨螺,也可以用在 RN 中。其他還有類似的比如 MobX(除此之外據(jù)說新版 React 有種 Context API 可以讓我們告別使用 Redux愧驱,不太清楚慰技,應(yīng)該是比較新的東西)。

先說一下组砚,一開始可以不使用 Redux吻商,Redux 的官網(wǎng)也提示說如果不知道要不要使用 Redux,則不要使用 Redux糟红。

學(xué)習(xí)自然要根據(jù)文檔來:Redux 英文官方文檔中文版

理解 Redux 比較關(guān)鍵的是它的狀態(tài)樹艾帐,所有的操作最終會反應(yīng)到狀態(tài)樹上乌叶,所有的操作也是圍繞狀態(tài)樹展開來的。所以一開始做 app 的時候設(shè)計一個比較貼切的狀態(tài)樹很關(guān)鍵柒爸。

進階

  1. 打包
  2. 熱更新
  3. 與原生交互
  4. RN 原生實現(xiàn)原理

參考資料有如下:

  1. React Native拆包及熱更新方案
  2. 攜程是如何做React Native優(yōu)化的
  3. 微軟的熱更新方案 CodePush
  4. ReactNative中文網(wǎng)推出的代碼熱更新服務(wù)
  5. iOS Native Modules
  6. iOS Native UI Components
  7. Android Native Modules
  8. Android Native UI Components
  9. React Native通信機制詳解

開發(fā)環(huán)境

我使用 Visual Studio Code准浴,不建議使用 Atom(很卡)。并且配置了 TypeScript 環(huán)境捎稚,配置參考 demo 地址: https://github.com/Microsoft/TypeScript-React-Native-Starter

注意事項

個人覺得 RN 的要求其實很高乐横,不僅要了解前端開發(fā)相關(guān)內(nèi)容,還要了解 Android 和 iOS 的原生內(nèi)容今野。一個純 JavaScript 的 RN 項目不太現(xiàn)實晰奖。所以建議在原生項目上使用 RN,不要使用純 RN 項目腥泥。這對于理解 RN 也有一定幫助匾南。

不建議使用其他類似 RN 的解決方案,比如說 Weex蛔外,當(dāng)然我并沒有了解過 Weex蛆楞。我想說的是 RN 的生態(tài)環(huán)境是很活躍的,GitHub 有很多開發(fā)者共享的開源代碼夹厌,很多人也在 GitHub 和 stackoverflow 上討論自己碰到的 RN 相關(guān)的問題豹爹。但是即使如此,RN 還是沒有出 1.0 版本矛纹,而且在實際使用過程中經(jīng)常要自己造輪子臂聋,也會碰到很多奇奇怪怪的問題,導(dǎo)致拖累開發(fā)速度或南,從學(xué)習(xí)角度不是問題孩等,但是工作就不一樣了。所以使用 Weex 情況可能更糟糕采够。

總結(jié)

學(xué)習(xí) React Native 的過程其實更像是入門 React 前端開發(fā)肄方,區(qū)別就是代碼環(huán)境從瀏覽器變成了移動設(shè)備。

在原生移動開發(fā)勢微的今天蹬癌,從 React Native 切入來了解前端開發(fā)也很不錯权她。在學(xué)習(xí)的同時,結(jié)合自己已有的原生開發(fā)經(jīng)驗逝薪,對比 React Native 開發(fā)隅要,更能在鞏固 React Native 相關(guān)知識的同時對加深原生開發(fā)的理解。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末董济,一起剝皮案震驚了整個濱河市步清,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌感局,老刑警劉巖尼啡,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件暂衡,死亡現(xiàn)場離奇詭異询微,居然都是意外死亡崖瞭,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門撑毛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來书聚,“玉大人,你說我怎么就攤上這事藻雌〈菩” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵胯杭,是天一觀的道長驯杜。 經(jīng)常有香客問我,道長做个,這世上最難降的妖魔是什么鸽心? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮居暖,結(jié)果婚禮上顽频,老公的妹妹穿的比我還像新娘。我一直安慰自己太闺,他們只是感情好糯景,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著省骂,像睡著了一般蟀淮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钞澳,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天灭贷,我揣著相機與錄音,去河邊找鬼略贮。 笑死甚疟,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的逃延。 我是一名探鬼主播览妖,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼揽祥!你這毒婦竟也來了讽膏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤拄丰,失蹤者是張志新(化名)和其女友劉穎府树,沒想到半個月后俐末,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡奄侠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年卓箫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垄潮。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡烹卒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出弯洗,到底是詐尸還是另有隱情旅急,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布牡整,位于F島的核電站藐吮,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏逃贝。R本人自食惡果不足惜谣辞,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望秋泳。 院中可真熱鬧潦闲,春花似錦、人聲如沸迫皱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卓起。三九已至和敬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間戏阅,已是汗流浹背昼弟。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奕筐,地道東北人舱痘。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像离赫,于是被迫代替她去往敵國和親芭逝。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容