React Native不到兩歲,兼容Android平臺(tái)剛剛1年。我學(xué)習(xí)React Native其實(shí)也就不到1年茫船,不算長(zhǎng),也不算短扭屁。
Paul Graham在文章中寫(xiě)過(guò):大多數(shù)人真正注意到你的時(shí)候算谈,不是第一眼看到你站在那里,而是發(fā)現(xiàn)了過(guò)了這么久你居然還在那里料滥。
我就是Paul提到的"大多數(shù)人"然眼,當(dāng)React Native剛出來(lái)的時(shí)候,我就通過(guò)CSDN等一些平臺(tái)了解了React Native葵腹,但是并沒(méi)有真正的關(guān)注它高每。
過(guò)了半年多屿岂,發(fā)現(xiàn)React Native不但還依然存在,而且還產(chǎn)生了不錯(cuò)的React Native社區(qū)鲸匿。從此開(kāi)始逐漸關(guān)注React Native爷怀。
至于為什么深入學(xué)習(xí)React Native,有以下幾點(diǎn)原因带欢。
一运授、開(kāi)發(fā)React Native很少使用設(shè)計(jì)模式
對(duì),你沒(méi)有看錯(cuò)洪囤,確實(shí)是很少使用設(shè)計(jì)模式徒坡。有人會(huì)問(wèn)我,這也算學(xué)習(xí)的理由瘤缩?
我先擱置一下喇完,先給大家講個(gè)絕大多數(shù)人都聽(tīng)過(guò)的故事。
金庸小說(shuō)中獨(dú)孤求敗的劍冢中剥啤,埋的是獨(dú)孤求敗一生幾個(gè)階段中用過(guò)的幾柄劍锦溪。
第一柄是一柄青光閃閃的無(wú)名利劍。凌厲剛猛府怯,無(wú)堅(jiān)不摧刻诊,弱冠前以之與河朔群雄爭(zhēng)鋒。
第二柄是紫薇軟劍牺丙,三十歲前所用则涯,誤傷義士不祥,乃棄之深谷冲簿。
第三柄是玄鐵重劍粟判,重劍無(wú)鋒,大巧不工峦剔,四十歲之前恃之橫行天下档礁。
第四柄是柄已腐朽的木劍,原因是獨(dú)孤求敗「四十歲后吝沫,不滯于物呻澜,草木竹石均可為劍」
獨(dú)孤求敗一生境界階段分為利劍級(jí)、軟劍級(jí)惨险、重劍級(jí)羹幸、木劍級(jí),對(duì)應(yīng)用不同的武器辫愉。
而程序員編程階段同樣分為幾個(gè)階段栅受。
- 利劍級(jí),利劍招式一般直接。剛?cè)肼殘?chǎng)的程序員窘疮,技術(shù)有限,一般都是以實(shí)現(xiàn)功能為主要任務(wù)冀墨,不考慮性能闸衫,模式。
- 軟劍級(jí)诽嘉,就是在招式已經(jīng)發(fā)揮到極致的基礎(chǔ)上追求變化的極致蔚出;當(dāng)程序員迭代過(guò)幾次項(xiàng)目,就會(huì)認(rèn)識(shí)到程序存在的問(wèn)題虫腋,代碼也會(huì)更加規(guī)范骄酗。
- 重劍級(jí),相比于軟劍是一種質(zhì)的飛躍悦冀;當(dāng)程序員工作多年后趋翻,做過(guò)好多項(xiàng)目,慢慢就會(huì)了解各種模式盒蟆,融會(huì)貫通踏烙,達(dá)到架構(gòu)師的高度。
- 木劍級(jí)历等,基本上達(dá)到人劍合一的境界; 這也是我主要要講的境界讨惩,能夠回到程序的本質(zhì)。
回到程序的本質(zhì)寒屯,程序的形式應(yīng)該僅僅反應(yīng)它所要解決的問(wèn)題荐捻。
當(dāng)我們開(kāi)發(fā)程序一段時(shí)間后,就會(huì)發(fā)現(xiàn)編程已經(jīng)變得制度化了寡夹,尤其是使用面向?qū)ο蟮恼Z(yǔ)言处面,我們大量聽(tīng)到 模式(pattern)這個(gè)詞,但是我們應(yīng)該想到模式并不應(yīng)該存在的要出。
程序就是為了要解決問(wèn)題鸳君,而在代碼中其它任何外加的形式都是在告訴我們,表明對(duì)問(wèn)題的抽象不夠深患蹂,這些原本應(yīng)該讓編程語(yǔ)言本身去實(shí)現(xiàn)或颊。
當(dāng)我使用原生代碼開(kāi)發(fā)Android程序的時(shí)候,用到了大量設(shè)計(jì)模式——工廠設(shè)計(jì)模式传于,適配器設(shè)計(jì)模式囱挑,單例設(shè)計(jì)模式等等一大堆。一開(kāi)始的時(shí)候自我感覺(jué)良好沼溜,認(rèn)為自己很牛逼平挑,面試別人或者自己去面試時(shí)都會(huì)顯擺下。后來(lái)我就想,Android框架為什么不提供更深的抽象通熄,讓我直接實(shí)現(xiàn)具體的功能唆涝,而不用使用各種模式搭建各種框架呢?
當(dāng)我接觸React Native時(shí)唇辨,雖然React Native也需要用到一些模式(現(xiàn)階段很難避免的)廊酣,但是React Native整體設(shè)計(jì)架構(gòu)要比Android強(qiáng)很多,非常直接赏枚。
舉個(gè)例子亡驰,在React Native開(kāi)發(fā)中,我們要改的數(shù)據(jù)統(tǒng)一放在狀態(tài)機(jī)中饿幅,只要改動(dòng)狀態(tài)機(jī)里的數(shù)據(jù)凡辱,界面上不管有多少處,只要和改動(dòng)的數(shù)據(jù)相關(guān)聯(lián)都會(huì)發(fā)生改變栗恩。而在Android原生開(kāi)發(fā)中透乾,可能需要把多處要改變的封裝到一起,進(jìn)行操作磕秤,無(wú)疑多了一步封裝续徽。
代碼更加直接,就意味著程序更加好維護(hù)亲澡。程序更好維護(hù)钦扭,就意味著成本更低。
二床绪、學(xué)習(xí)成本比較高
第二點(diǎn)讓我學(xué)習(xí)的理由就是React Native學(xué)習(xí)成本相對(duì)比較高客情,也許之前的理由你接受了,這個(gè)可能又會(huì)讓你抓狂癞己,為什么學(xué)習(xí)成本高還要去學(xué)習(xí)鞍蛘?
往往學(xué)習(xí)成本高的才更加值得去學(xué)習(xí)痹雅!
React Native學(xué)習(xí)成本確實(shí)很高,
你首先肯定需要學(xué)習(xí)JSX語(yǔ)法仰担,React知識(shí),學(xué)習(xí)ES6绩社,函數(shù)式編程思想摔蓝。如果你想了解React Native構(gòu)建的還需要學(xué)習(xí)nodejs。封裝原生組件還需要學(xué)習(xí) java愉耙,object-c贮尉,swift, 也就是需要學(xué)習(xí)Android和ios原生開(kāi)發(fā)朴沿。設(shè)計(jì)到通訊原理還需要了解C++猜谚。
有些程序員可能會(huì)因?yàn)橄腱乓约阂?jiàn)多識(shí)廣败砂,會(huì)告訴你“所有編程語(yǔ)言基本相似”,“語(yǔ)言不重要魏铅,重要的是理解”昌犹;其實(shí)上面說(shuō)的是一派胡言,每種語(yǔ)言從語(yǔ)法到概念览芳,都不一樣祭隔。你學(xué)會(huì)其中一門(mén)語(yǔ)言對(duì)你學(xué)另一門(mén)語(yǔ)言的好處就是你可以進(jìn)行對(duì)比,加深學(xué)習(xí)的印象路操。
雖然學(xué)習(xí)成本很高,但是通過(guò)學(xué)習(xí)React Native而掌握這么多技術(shù)并不是什么壞事千贯。React Native其實(shí)就把各種知識(shí)打成一個(gè)壓縮包屯仗,讓我們更有效率的學(xué)習(xí)。
React Native技術(shù)搔谴,同時(shí)具備可測(cè)量性和可放大性魁袜。
React Native既可以開(kāi)發(fā)Android也可以開(kāi)發(fā)IOS,尤其是寫(xiě)界面的速度非常快敦第。通過(guò)測(cè)量完成的程序峰弹,理論上你可以是一名普通的Android/IOS程序員的兩倍。
微軟也開(kāi)發(fā)了Windows Phone的React Native版本芜果。通過(guò)React知識(shí)鞠呈,你可以輕松寫(xiě)出Web端程序。甚至在微信小程序中都能找到React Native的影子右钾。
我們這個(gè)世界蚁吝,你向下沉淪或者向上奮進(jìn)都取決于你自己,不能把原因推給外界舀射。有些剛畢業(yè)的學(xué)生一聽(tīng)到5%的人占社會(huì)50%的財(cái)富窘茁,往往認(rèn)為是不公平的。從程序員的角度脆烟,我也認(rèn)為是不公平的山林,因?yàn)?%的程序員寫(xiě)出了全世界99%的優(yōu)秀軟件,他們就應(yīng)該占更高比例的收入邢羔。
一個(gè)React Native程序員就應(yīng)該是一個(gè)普通的Android/iOS程序員工資的兩倍驼抹,并沒(méi)有什么問(wèn)題。
三拜鹤、React Native還不是很完善
React Native還有很多坑砂蔽,并不完善,React Native幾乎每個(gè)月都有新的小版本發(fā)布署惯,至今還沒(méi)有推出1.0正式版本左驾。這也恰恰使我們學(xué)習(xí)React Native的理由!
前幾年,我在北京上班時(shí)經(jīng)常聽(tīng)到j(luò)avaEE程序員抱怨自己開(kāi)發(fā)了這么多年不如一個(gè)新入職的Android/iOS程序員工資高诡右。
其實(shí)很好理解啊安岂,難道不知道技術(shù)越新越值錢(qián)這個(gè)道理嗎?
程序員就像蚊子一樣帆吻,群體很多域那,在后廠村路上10個(gè)估計(jì)有7個(gè)是程序員,但是每個(gè)程序員個(gè)體壓力又很大猜煮,想生存必須吸取新鮮的血液次员。
目前使用React Native的公司不是很多,當(dāng)你作為一個(gè)產(chǎn)品經(jīng)理或CTO時(shí)王带,你肯定優(yōu)先跟隨大多數(shù)人的選擇的做法淑蔚,有個(gè)專業(yè)術(shù)語(yǔ)叫做“業(yè)界最佳實(shí)踐”。因?yàn)檫@個(gè)詞出現(xiàn)的原因就是為了產(chǎn)品經(jīng)理/CTO 推卸責(zé)任愕撰。既然我選擇的是“業(yè)界最佳實(shí)踐”刹衫,如果不成功,不是我的問(wèn)題搞挣,而是“業(yè)界”的問(wèn)題带迟。
但是如果你是一名程序員按照上面的做法你會(huì)死的很慘,因?yàn)椤皹I(yè)界最佳實(shí)踐”會(huì)逐漸變化的囱桨,一旦你掌握的技能不是“業(yè)界最佳實(shí)踐”了仓犬,你就要想辦法讓你的房貸別斷供了。
React Native不會(huì)取代Android/iOS原生開(kāi)發(fā)舍肠,但隨著React Native正式版推出婶肩,也許它就變成了“業(yè)界最佳實(shí)踐”了。
關(guān)于如何學(xué)習(xí)React Native
如果想快速入門(mén)React Native貌夕,官方Api是肯定需要看的律歼。里面不但有文檔而且有例子,涵蓋了絕大多數(shù)知識(shí)啡专。
http://facebook.github.io/react-native/docs/getting-started.html
英文不好的話,可以參考react-native中文文檔(建議也要對(duì)比英文文檔)
http://react-native.cn/docs/getting-started.html
FaceBook官方也提供了演示App,可以作為參考
https://github.com/facebook/react-native/tree/master/Examples
facebook開(kāi)源的f8項(xiàng)目也是蠻不錯(cuò)的
https://github.com/fbsamples/f8app
總結(jié)
沒(méi)有人有任何義務(wù)去看任何一篇文章险毁,當(dāng)您點(diǎn)擊我的文章時(shí)就已經(jīng)很看得起我了,我非常感謝您们童,也許我的觀點(diǎn)并不是對(duì)的畔况,但是我相信時(shí)刻保持一顆學(xué)習(xí)的心永遠(yuǎn)是對(duì)的。