React Native(之后簡寫為RN)火了一段時間了璃饱,但是當我跟身邊的小伙伴提起的時候与斤,好像知道的人并不多,是身邊的伙伴Out了嗎?其實撩穿,這還是得看是否有機會讓你去研究的磷支。可能你聽了 RN 后根本不在意食寡,也可能你想去了解下他雾狈,但是工作很忙,后來也就漸漸念頭消失了抵皱。當然善榛,如果你是技術宅(Me too)那可能怎樣你都能抽出時間去學習。我算幸運了呻畸,公司領導是個對新技術有熱情的人移盆,所以,公司決定用 RN 重構整個項目伤为。原因有兩個:1. 將iOS和Android統一開發(fā)咒循,為之后節(jié)省大量時間;2. 無需Apple審核绞愚,實現動態(tài)更新叙甸。
正文
今天,將對自己這段時間所學位衩,做個總結裆蒸,當然,也希望讀者能從中學到點什么糖驴。在學習的過程中僚祷,如果遇到什么問題弟晚,希望我們也能相互交流。
下面贤姆,我將圍繞這幾個問題說明:
- 學習 RN 有用嗎腥刹?
- 學習 RN 前需要準備什么?
- 遇到問題怎么辦缚够? ...
我們先不說未來 RN 是否會家喻戶曉,我們先了解下他在試圖解決什么問題。官方網站有句話:Learn Once, Write Anywhere抑诸。學習一種編程語言,實現所有平臺的功能(從目前看爹殊,這門語言非 Javascript 莫屬了)蜕乡。Facebook表面上是說讓Javascript可以實現多平臺,其實從另一個層面上說梗夸,他在試圖解決代碼重復編寫的問題层玲。意思就是:你沒有辦法讓 1 + 1 = 1, 但是可以實現 1 + 1 <<< 2(遠小于2)。 這樣說吧,假設你會 iOS 開發(fā)辛块,又會 Android 開發(fā)畔派,現在讓你開發(fā)一個 App,你需要寫 1 + 1 = 2 這么多的代碼润绵,即使你的 Model线椰,你的 View 封裝的再好,由于所用的編程語言不同尘盼,語法就更不用說了憨愉,所以你還是得改改改,然后才能轉到另外一個平臺去(一般情況下不會這樣做的卿捎,都是Android和iOS分開開發(fā)的)配紫。那現在如果能讓 1 + 1 <<< 2 的話,你做不做午阵?你學不學笨蚁?另外,不管如何趟庄,這種思想是正確的括细,誰不想花少時間開發(fā)出同樣的產品呢。
那些只是聽過 RN 的人總會誤以為 RN 所用的控件都是通過類似 H5 搭建App那樣全部基于 web 來實現的戚啥,當我像他們提起說公司現在用 RN 重新搭建項目時奋单,他們就會問:那 Native 的控件都不用了嗎?性能會不會很差呀猫十? 其實览濒,不是的,從名字上就可以看出拖云,RN用的是 Native 的控件贷笛。RN 上的控件(又叫組件)是通過 Native 上的控件進行封裝的,所以我們用的還是 Native 的控件宙项。但是現在 RN 還是有不少問題的乏苦,比如使用的 TableView(ListView) 就沒法像 Native 那么高性能了,但是問題總有解決的一天尤筐。
那學習 RN 之前汇荐,我們需要什么技能儲備呢?前面說了盆繁,RN 所使用的編程語言是 Javascript(使用的是jsx)語法掀淘,所以
- 有點 Javascript的基礎是必須的,至少你得知道怎樣定義一個變量油昂,怎樣定義一個函數(方法)革娄,然后稍微理解一下閉包(我就是只懂這些就開始的)倾贰,閉包的概念現在在很多語言上都有了,Objective-C拦惋,swift匆浙,Java 等都引入了;
- 既然是開發(fā) App架忌,當然某一個平臺的編程語言你是必須熟悉的吞彤。如果你已經是 iOS 或者 Android 開發(fā)者那就不用說了;
- flex-box 的布局方式你得先了解下,這對你的開發(fā)適配有很大的幫助叹放。
下面說說我是怎樣準備這些的:
- Javascript可以說我基本上都是不懂的饰恕,之前想學,但是都沒機會井仰。只知道
var
來定義變量埋嵌,通過看其他源碼例子,不懂就查(如數組元素怎樣拼接成字符串俱恶,字符串怎樣分割成數組這些很基本的函數調用雹嗦,方法名其實跟其他語言的都基本一樣),現在寫出某個功能已經基本上沒問題了合是,遇到不懂的語法就查下了罪; - 因為我是做iOS開發(fā)的,所以對Objective-C還是有信心的(這樣決定了我后面寫的一些實現都只涉及到iOS聪全,當然泊藕,很多都是和Android通用的);
- 我是這樣學 flex-box 的,先看一遍這篇文章:一個完整的Flexbox指南或這篇Flex布局教程:語法篇了解了它大概能怎樣進行布局难礼,然后這篇文章我就沒再關掉過了(至少到現在都沒關掉這個網頁)娃圆,還是那句話,不記得的時候就看一下蛾茉,漸漸的就熟悉了讼呢。就這樣我開始了 RN 開發(fā)項目之旅。
最后一個問題谦炬,遇到問題怎么辦悦屏? 現在我知道的是國內有幾個中文社區(qū),如React-China, React Native中文社區(qū)吧寺。國外資料的話窜管,首先 Facebook 的官方文檔已經有很詳細的使用說明了。但是我們遇到其他各式各樣的問題稚机,如果遇到不懂的語法直接 google基本上就夠了,而如果發(fā)現了 RN 的 bug 之類的获搏,我們可以直接去 RN 的 github 上去查 issue赖条,沒準其他人也已經發(fā)現了失乾,如果實在沒有,那就只能自己發(fā) issue 了纬乍。另外碱茁,RN 現在更新很快,基本上兩三個星期就有個新的版本了仿贬,所以纽竣,今天發(fā)現的 bug 可能明天就被修復了。
茧泪,