為什麼要學習React Native?
React Native不到兩歲,兼容Android平台剛剛1年。我學習React Native其實也就不到1年,不算長,也不算短。
Paul Graham在文章中寫過:大多數人真正注意到你的時候,不是第一眼看到你站在那裡,而是發現了過了這麼久你居然還在那裡。
我就是Paul提到的"大多數人",當React Native剛出來的時候,我就通過CSDN等一些平台了解了React Native,但是並沒有真正的關注它。
過了半年多,發現React Native不但還依然存在,而且還產生了不錯的React Native社區。從此開始逐漸關注React Native。
至於為什麼深入學習React Native,有以下幾點原因。
一、開發React Native很少使用設計模式
對,你沒有看錯,確實是很少使用設計模式。有人會問我,這也算學習的理由?
我先擱置一下,先給大家講個絕大多數人都聽過的故事。
金庸小說中獨孤求敗的劍冢中,埋的是獨孤求敗一生幾個階段中用過的幾柄劍。
第一柄是一柄青光閃閃的無名利劍。凌厲剛猛,無堅不摧,弱冠前以之與河朔群雄爭鋒。
第二柄是紫薇軟劍,三十歲前所用,誤傷義士不祥,乃棄之深谷。
第三柄是玄鐵重劍,重劍無鋒,大巧不工,四十歲之前恃之橫行天下。
第四柄是柄已腐朽的木劍,原因是獨孤求敗「四十歲後,不滯於物,草木竹石均可為劍」
獨孤求敗一生境界階段分為利劍級、軟劍級、重劍級、木劍級,對應用不同的武器。
而程序員編程階段同樣分為幾個階段。
利劍級,利劍招式一般直接。剛入職場的程序員,技術有限,一般都是以實現功能為主要任務,不考慮性能,模式。
軟劍級,就是在招式已經發揮到極致的基礎上追求變化的極致;當程序員迭代過幾次項目,就會認識到程序存在的問題,代碼也會更加規範。
重劍級,相比於軟劍是一種質的飛躍;當程序員工作多年後,做過好多項目,慢慢就會了解各種模式,融會貫通,達到架構師的高度。
木劍級,基本上達到人劍合一的境界; 這也是我主要要講的境界,能夠回到程序的本質。
回到程序的本質,程序的形式應該僅僅反應它所要解決的問題。
當我們開發程序一段時間後,就會發現編程已經變得制度化了,尤其是使用面向對象的語言,我們大量聽到 模式(pattern)這個詞,但是我們應該想到模式並不應該存在的。
程序就是為了要解決問題,而在代碼中其它任何外加的形式都是在告訴我們,表明對問題的抽象不夠深,這些原本應該讓編程語言本身去實現。
當我使用原生代碼開發Android程序的時候,用到了大量設計模式——工廠設計模式,適配器設計模式,單例設計模式等等一大堆。一開始的時候自我感覺良好,認為自己很牛逼,面試別人或者自己去面試時都會顯擺下。後來我就想,Android框架為什麼不提供更深的抽象,讓我直接實現具體的功能,而不用使用各種模式搭建各種框架呢?
當我接觸React Native時,雖然React Native也需要用到一些模式(現階段很難避免的),但是React Native整體設計架構要比Android強很多,非常直接。
舉個例子,在React Native開發中,我們要改的數據統一放在狀態機中,只要改動狀態機里的數據,界面上不管有多少處,只要和改動的數據相關聯都會發生改變。而在Android原生開發中,可能需要把多處要改變的封裝到一起,進行操作,無疑多了一步封裝。
代碼更加直接,就意味著程序更加好維護。程序更好維護,就意味著成本更低。
二、學習成本比較高
第二點讓我學習的理由就是React Native學習成本相對比較高,也許之前的理由你接受了,這個可能又會讓你抓狂,為什麼學習成本高還要去學習啊?
往往學習成本高的才更加值得去學習!
React Native學習成本確實很高,
你首先肯定需要學習JSX語法,React知識,學習ES6,函數式編程思想。如果你想了解React Native構建的還需要學習nodejs。封裝原生組件還需要學習 java,object-c,swift, 也就是需要學習Android和ios原生開發。設計到通訊原理還需要了解C++。
有些程序員可能會因為想炫耀自己見多識廣,會告訴你「所有編程語言基本相似」,「語言不重要,重要的是理解」;其實上面說的是一派胡言,每種語言從語法到概念,都不一樣。你學會其中一門語言對你學另一門語言的好處就是你可以進行對比,加深學習的印象。
雖然學習成本很高,但是通過學習React Native而掌握這麼多技術並不是什麼壞事。React Native其實就把各種知識打成一個壓縮包,讓我們更有效率的學習。
React Native技術,同時具備可測量性和可放大性。
React Native既可以開發Android也可以開發IOS,尤其是寫界面的速度非常快。通過測量完成的程序,理論上你可以是一名普通的Android/IOS程序員的兩倍。
微軟也開發了Windows Phone的React Native版本。通過React知識,你可以輕鬆寫出Web端程序。甚至在微信小程序中都能找到React Native的影子。
我們這個世界,你向下沉淪或者向上奮進都取決於你自己,不能把原因推給外界。有些剛畢業的學生一聽到5%的人占社會50%的財富,往往認為是不公平的。從程序員的角度,我也認為是不公平的,因為5%的程序員寫出了全世界99%的優秀軟體,他們就應該占更高比例的收入。
一個React Native程序員就應該是一個普通的Android/iOS程序員工資的兩倍,並沒有什麼問題。
三、React Native還不是很完善
React Native還有很多坑,並不完善,React Native幾乎每個月都有新的小版本發布,至今還沒有推出1.0正式版本。這也恰恰使我們學習React Native的理由!
前幾年,我在北京上班時經常聽到javaEE程序員抱怨自己開發了這麼多年不如一個新入職的Android/iOS程序員工資高。
其實很好理解啊,難道不知道技術越新越值錢這個道理嗎?
程序員就像蚊子一樣,群體很多,在後廠村路上10個估計有7個是程序員,但是每個程序員個體壓力又很大,想生存必須吸取新鮮的血液。
目前使用React Native的公司不是很多,當你作為一個產品經理或CTO時,你肯定優先跟隨大多數人的選擇的做法,有個專業術語叫做「業界最佳實踐」。因為這個詞出現的原因就是為了產品經理/CTO 推卸責任。既然我選擇的是「業界最佳實踐」,如果不成功,不是我的問題,而是「業界」的問題。
但是如果你是一名程序員按照上面的做法你會死的很慘,因為「業界最佳實踐」會逐漸變化的,一旦你掌握的技能不是「業界最佳實踐」了,你就要想辦法讓你的房貸別斷供了。
React Native不會取代Android/iOS原生開發,但隨著React Native正式版推出,也許它就變成了「業界最佳實踐」了。
關於如何學習React Native
如果想快速入門React Native,官方Api是肯定需要看的。裡面不但有文檔而且有例子,涵蓋了絕大多數知識。
http://facebook.github.io/react-native/docs/getting-started.html
英文不好的話,可以參考react-native中文文檔(建議也要對比英文文檔)
http://react-native.cn/docs/getting-started.html
FaceBook官方也提供了演示App,可以作為參考
https://github.com/facebook/react-native/tree/master/Examples
facebook開源的f8項目也是蠻不錯的
https://github.com/fbsamples/f8app
推薦閱讀:
※TypeScript在React高階組件中的使用技巧
※前端 UI組件化的一些思考
※2016-我的前端之路:工具化與工程化
※redux-saga 實踐總結
※公司要求統一一套前端腳手架,該怎麼選擇?
TAG:互聯網 | JavaScript | 前端開發 | React | AngularJS |