React Native 是一款用來開發(fā)真正原生瞭稼、可渲染 iOS 和 Android 移動應(yīng)用的 JavaScript 框架。它基于 Facebook 公司開源的 JavaScript 用戶界面開發(fā)框架 React 而產(chǎn)生哑舒,但 React 將瀏覽器作為渲染平臺溪胶,而 React Native 的渲染平臺則是移動設(shè)備冗尤。也就是說,Web 開發(fā)者現(xiàn)在就可以使用我們非常熟悉的 JavaScript 類庫來開發(fā)真正原生的移動應(yīng)用曲楚。并且,由于編寫的大部分代碼可以在平臺之間共享褥符,React Native 可以讓你更簡單地同步開發(fā) Android 和 iOS 應(yīng)用龙誊。
與 Web 平臺上的 React 相似,React Native 也使用 JSX 進行開發(fā)喷楣,這種編程語言結(jié)合了 JavaScript 和類 XML 標(biāo)記語言趟大。React Native 在后臺通過“橋接”的方式調(diào)用由 Objective-C(iOS 平臺)或 Java(Android 平臺)開放的原生渲染接口,因此铣焊,你的應(yīng)用將會使用真正原生的移動 UI 組件逊朽,而不是傳統(tǒng)的 WebView 渲染方式,進而擁有與其他移動應(yīng)用一樣的外觀和體驗曲伊。同時叽讳,React Native 也為 JavaScript 開放了平臺接口,讓你的應(yīng)用能夠使用平臺提供的功能坟募,例如攝像頭和用戶定位等岛蚤。
React Native 目前同時支持 iOS 和 Android,今后也可能擴展到其他平臺上懈糯。在本書中涤妒,我們將會同時介紹 iOS 和 Android 的知識,并且書中大部分代碼都能跨平臺運行赚哗。沒錯她紫,你完全可以用 React Native 來開發(fā)用于正式發(fā)布的移動應(yīng)用。據(jù)了解蜂奸,F(xiàn)acebook(https://code.facebook.com/posts/1014532261909640/react-native-bringing-modern-web-techniques-to-mobile/)犁苏、Palantir(https://medium.com/@clayallsopp/react-native-in-production-2b3c6e6078ad#.wui5g18dx)和 TaskRabbit(http://tech.taskrabbit.com/blog/2015/09/21/react-native-example-app/)等公司已在使用它開發(fā)面向用戶的應(yīng)用。
1. React Native的優(yōu)點
事實上扩所,React Native 調(diào)用宿主平臺標(biāo)準(zhǔn)渲染接口的方式已經(jīng)使它從其他現(xiàn)有的跨平臺應(yīng)用開發(fā)方案( 比如 Cordova 或 Ionic) 中脫穎而出。 目前通過編寫 JavaScript朴乖、HTML 和 CSS 的方式進行應(yīng)用開發(fā)的方案大多使用 WebView 進行界面渲染祖屏,當(dāng)然這種方案是可行的,但也帶來了一些問題买羞,尤其是性能損耗袁勺。同時,這種方案通常無法使用宿主平臺的原生 UI 組件畜普,所以這些框架嘗試去模仿原生 UI 組件的行為期丰,而模仿的效果通常讓人覺得不夠真實。為了模仿各種類似動畫這樣的細節(jié),一般都要付出巨大的努力钝荡,然而它們很快又會過時街立。
相反,React Native 則將你的代碼解析成真正原生的 UI 組件埠通,利用了所用平臺上現(xiàn)有的視圖渲染方式赎离。并且,由于 React 不在 UI 主線程中運行端辱,你的應(yīng)用可以在不犧牲靈活性的前提下保持高性能梁剔。React Native 的生命周期與 React 相同,當(dāng)屬性(props)或狀態(tài)(state)發(fā)生改變時舞蔽,React Native 會重新渲染視圖荣病。而與瀏覽器上的 React 最大的不同在于,React Native 使用了宿主平臺上的 UI 元素來代替 HTML 和 CSS渗柿。
對于習(xí)慣了 Web 平臺的 React 開發(fā)者來說众雷,這意味著你可以使用熟悉的工具來開發(fā)真正原生的移動應(yīng)用。在開發(fā)者體驗與跨平臺開發(fā)等方面做祝,React Native 較傳統(tǒng)的移動端開發(fā)來說也有一定的優(yōu)勢砾省。
?開發(fā)者體驗
如果你曾經(jīng)有過移動端的開發(fā)經(jīng)歷,將會對 React Native 的易用性感到震驚混槐。React Native 團隊已經(jīng)研發(fā)了強大的開發(fā)工具并在框架內(nèi)嵌入了友好的錯誤提示编兄,因此使用這些強大的工具會讓開發(fā)體驗更加自然。
例如声登,由于 React Native 使用了 JavaScript狠鸳,我們查看修改結(jié)果時不需要重新編譯。相反悯嗓,按下 Command+R 就可以刷新應(yīng)用件舵,就和在網(wǎng)頁上開發(fā)一樣。在傳統(tǒng)移動端開發(fā)中脯厨,編譯構(gòu)建應(yīng)用所花費的時間會積少成多铅祸,相比之下 React Native 的快速迭代就像是天賜之福。
React Native 還可以讓你更好地利用智能調(diào)試工具以及錯誤報告機制合武。如果你習(xí)慣于使用 Chrome 或者 Safari 的開發(fā)工具(下圖)临梗,那么使用它們進行移動開發(fā)一定也會讓你十分愉悅。同樣稼跳,你可以選擇喜愛的任何文本編輯器來開發(fā) JavaScript:React Native 不強制你使用 Xcode 進行 iOS 開發(fā)盟庞,也不強制使用 Android Studio 進行 Android 開發(fā)。
除了能逐漸改善開發(fā)者體驗之外汤善,React Native 也極有可能給你的產(chǎn)品發(fā)布周期帶來一些積極的影響什猖。例如票彪,Apple 公司允許通過網(wǎng)絡(luò)對基于 JavaScript 開發(fā)的功能進行更新,無需額外的審核周期不狮。
所有這些小福利將會節(jié)省你和你的伙伴們的時間和精力降铸,讓你可以專注于工作中那些更有趣的部分,同時也能提高你的工作效率荤傲。
?代碼復(fù)用與知識共享
使用 React Native 可以大大減少開發(fā)移動應(yīng)用所需的資源垮耳。任何了解如何編寫 React 的開發(fā)者現(xiàn)在都可以使用相同的技能同時開發(fā) Web 應(yīng)用、iOS 應(yīng)用和 Android 應(yīng)用遂黍。React Native 避免了按平臺分工的必要终佛,可以讓你的團隊更加快速地迭代產(chǎn)品,并更加高效地共享知識和資源雾家。
除了知識的共享之外铃彰,你的大部分代碼也可以被共享。當(dāng)然芯咧,不是你寫的所有代碼都可以做到跨平臺牙捉;這取決于你需要在特定的平臺上實現(xiàn)什么功能,你可能偶爾也需要涉及 Objective-C 或 Java 的知識(好在這也不是很糟糕敬飒,我們將會在第 7 章講解本地模塊的用法)邪铲。使用 React Native,在不同平臺之間復(fù)用代碼將會變得出乎意料地簡單无拗。例如带到,React Europe 2015 大會(https://www.youtube.com/watch?v=PAA9O4E1IM4&feature=youtu.be)提到,F(xiàn)acebook Ads Manager 這款 Android 應(yīng)用共享了其 iOS 版本 87% 的代碼英染。另外揽惹,我們通過本書完成的一款閃卡應(yīng)用做到了 iOS 和 Android 代碼的完全復(fù)用。這是很難超越的成就四康!
2.?風(fēng)險和缺點
就像世間萬物一樣搪搏,React Native 也難免存在一些缺點,至于 React Native 是否適合你的團隊闪金,則取決于你們自身的情況疯溺。
React Native 于 2015 年 3 月發(fā)布了對 iOS 平臺的支持,同年 9 月開始支持 Android 平臺毕泌。由于目前 React Native 項目還很年輕喝检,不夠成熟可能是其最大的風(fēng)險。它的文檔確實還有提升的空間撼泛,同時項目也在不斷升級和改進。一些特性在 iOS 和 Android 平臺上仍未得到支持澡谭,社區(qū)也在不斷尋找最佳的開發(fā)實踐愿题。不過损俭,好在大多數(shù)情況下你都可以自己實現(xiàn)那些缺少的接口,我們也會在第 7 章討論相關(guān)內(nèi)容潘酗。
React Native 在你的項目中引入了新的一層杆兵,因此帶來了一些調(diào)試上的麻煩,尤其是在 React 和宿主平臺交互時仔夺。我們將在第 8 章更加深入地講解 React Native 的調(diào)試技巧琐脏,并探討一些常見的問題。
React Native 依然還很年輕缸兔,追隨新技術(shù)時可能遇到的問題在此也不可避免日裙。不過總體來說,我覺得你將會看到它帶來的收益大于風(fēng)險惰蜜。
3. 更多學(xué)習(xí)資源
《React Native開發(fā)指南》代碼示例
https://github.com/bonniee/learning-react-native
加入 LearningReactNative.com(http://learningreacnative.com)的郵件列表獲取后續(xù)的文章昂拂、建議和實用的資源。
官方文檔(https://facebook.github.io/react-native/)中有大量優(yōu)秀的參考資料抛猖。
React Native 社區(qū)也是實用的資源
Brent Vatne 的 React Native newsletter(http://brentvatne.ca/react-native-newsletter/)
Stack Overflow 上的 react-native 標(biāo)簽分類(http://stackoverflow.com/questions/tagged/react-native)
Freenode 上的 #reactnative 小組(irc://chat.freenode.net/reactnative)
<知乎問答>
如何評價 React Native格侯?
https://www.zhihu.com/question/27852694
react.js,angular.js,vue.js學(xué)習(xí)哪個好?
內(nèi)容整理自《React Native開發(fā)指南》
作者:Bonnie Eisenmen
譯者:黃為偉
定價:59
React Native核心貢獻者Brent Vatne推薦
Amaozn 五星好評财著,Twitter資深軟件工程師通過豐富示例詳細講解React Native
從基礎(chǔ)開始逐步深入联四,利用React Native成功部署可100%代碼復(fù)用的跨平臺應(yīng)用
在React Native中利用現(xiàn)有的JavaScript和React知識,就可以開發(fā)和部署功能完備的撑教、真正原生的移動應(yīng)用朝墩,并同時支持iOS與Android平臺。除了框架本身的概念講解之外驮履,本書還討論了如何使用第三方庫鱼辙,以及如何編寫自己的Java或Objective-C的React Native擴展。
<購買>
京東:http://item.jd.com/11942017.html
亞馬遜:https://www.amazon.cn/dp/B01HU04MK6
當(dāng)當(dāng):http://product.dangdang.com/23995421.html
試讀及購買電子版(29.99):http://www.ituring.com.cn/book/1846
贈書活動
你喜歡哪款類庫或者框架玫镐?
評論中說說自己喜歡的類庫或者框架(or 被虐踩過的坑)倒戏,挑選3人以下任選一本,截止21日12:00恐似。
React Native開發(fā)指南
React Native入門與實戰(zhàn)
AngularJS權(quán)威教程
jQuery基礎(chǔ)教程(第4版)
精通jQuery(第2版)
深入淺出Node.js
Node.js實戰(zhàn)
Ext JS實戰(zhàn)(第2版)
本文選自圖靈教育微信杜跷。