今天早上醒來,接到一封郵件。郵件的內容大概就是Facebook終於正式開源了ReactNative。這篇文章談談我對ReactNative的第一時間體驗以及看法。
ReactNative vs. NativeScript
我在接觸React Native之前學習過NativeScript,它們的共同特點就是脫離傳統Hybrid App的思路,基於HTML、CSS、JavaScript重新定義了一套規則。
NativeScript是一個社區構建的產品,這一方面促進了它的高速迭代,另一方面卻讓它變得很混亂。我使用NativeScript的時候實際上是抱著一種很寬容的態度的,然而實際上NativeScript有非常多的bug。這可能也是一個完全由社區驅動的產品的特點。
React Native畢竟有著Facebook這樣的公司作為背景,強大的工程團隊做支撐。在使用了一會兒之後,它給我的第一印象遠遠超過了Native Script。下面我來談談React Native的第一印象。
直觀(Intuitive)
我認為React.js(Web平台)的一大特點就是直觀,頁面由Components組成,不像Angular.js一樣有一套很復雜的機制以及很難學懂的最佳實踐。
React Native繼承了這一點,而且我認為這一優點會被放大。因為在移動平台,頁面的組件一般會比較少,每個組件也應該比較小。利用React.js的語法,我們就可以創建Native的View。
var name = 'John Wu'; var avatarUrl = 'http://placehold.it/40x40'; render: function() {return (Hello{name}); }
React.js的特性我們都可以在React Native裡面使用。
新Web特性支持
許多重要的ES6特性都被支持。從官方Tutorial中就可以看到很多新特性,諸如
Arrow functions
Object destruction
React Native還支持Fetch API,為XMLHttpRequest提供了很好的封裝。
同時,React Native還支持Flexbox。Flexbox是新的Web頁面Layout解決方案。我提供幾個鏈接給大家,供有興趣的朋友學習。
A complete guide to Flexbox
Flex adventures
Using Flexbox today
相信還有更多的cutting-edge technologies會在這個平台上被開發出來。
Live Reloading
我是一個不折不扣的懶人,我之前在做頁面的時候經常使用Live Reload,盡管我在寫頁面的時候並不經常去看頁面。
React Native允許你在本地啟動一個服務器,讓你的模擬器(我這裡用的是iOS Simulator)與這個服務器通訊,實時渲染你的應用。在iOS Simulator中開發的時候,只需要使用cmd+R就可以刷新你的應用。
然而,在類似NativeScript、Cordova這樣的平台中,你都需要重新Build項目才行。
Native Module
React Native允許你自己編寫Objective-C代碼(稱作Native Module),並在項目中使用。當你需要用到一些Native API、高性能的處理(例如多線程)時,就可以使用OC編寫相應模塊。
// CalendarManager.h #import "RCTBridgeModule.h" @interface CalendarManager : NSObject @end
Native Module必須實現protocal RCTBridgeModule。
平台支持
目前開發僅支持Mac OS,部署僅支持iOS平台。後續一定會有其他平台的支持。
總結
React Native的讓我感覺非常地務實,但同時又打破了很多既有的東西。
說它務實,它並未一次性支持了所有平台,而且也並未試圖完全使用現有的Web技術去實現Native應用的開發。說它打破了很多既有的東西,上面我所說的幾點都可以證明這幾點。更重要的是它的開發體驗非常好,在起步學習的時候我基本沒有遇到任何阻力(前提是你學習過React.js)。
我將持續關注React Native,並希望能和大家交流更多有關Web與Native的話題。