關於 React Native,你想知道的都在這裡了

Dom tree Diff 是什麼? 具體是怎麼運算的呢? 尤其是提高效率上。

既然原生上面有一層虛擬DOM,那按道理應該可以做到根據一套JS在不同的環境下渲染不同的原生代碼,實現1次編寫處處運行。而且Native是需要編譯的吧,那它應該做不到H5那種的實時更新。還有一點,這層虛擬DOM能做到一套View同時渲染Web和Native兩套界面嗎?

是這樣的,因為iOS和Android有各自不同風格的控件,有的區別很大,所以React-Native提供了Platform可以判斷當前系統是Android還是iOS,然後渲染什麼樣的UI,這些可以寫在一套js代碼裡,熱更新不需要編譯,React-Native有一個bundle命令,打包出來的bundle文件是可以直接被加載的,不需要編譯。 如果想一套View渲染Web和App的話,UI部分的代碼是不一樣的,這個可以看React的文檔和React-Native的文檔,render渲染的JSX部分代碼不一樣。

既然Web的view和Native的view無法公用,那在Web上弄一層shadow-dom有什麼意義?僅僅為了實現diff算法嗎?React確實我沒深入瞭解過,寫NG比較多,感覺寫React很繁瑣

虛擬DOM主要是解決Web的一個性能瓶頸問題,類似cordova之類的跨平臺解決方案性能瓶頸就在DOM上,虛擬DOM就是當DOM有更改的時候在進行DOM渲染,可以有效地減少DOM渲染次數,解決這個性能問題。NG更適合單頁的web app或者說H5在native部分。

問下兩個問題 1).React Native當初宣傳的時候說的是 一次學習,處處編寫。為什麼React Native不是那種傳統的一次編寫,處處運行。 2)Native和Web端的React有聯繫嗎?

React-native是從React發展而來的,最大的優勢就是既有Web的熱更新優勢,又有接近Native的性能,核心思想是虛擬DOM,所以針對不同的平臺編寫不同的JS,實際上底層調用的還是原生控件,所以是一次學習處處編寫而不是一次編寫處處運行。 Native和Web端的react是有聯繫的。

React Native 組件的屬性和方法夠多夠靈活嗎?

目前React-Native的第三方庫還不是很豐富,需要oc的支持和暴露,當然這只是目前。組件的方法不是很多,但是很好的處理了一個UI組件的渲染生命週期,足以控制組件;組件可以自定義和擴展,所以屬性是可以靈活使用。具體的可以關注3個比較重要的屬性:props、state、ref

二、入門相關

這個需要什麼基礎?還有就是以後的發展您是怎麼看的?會代替原生還是和原生相輔相成?

(1)基礎:前端基礎,例如:JS、JSX、Flexbox以及熟悉iOS的組件即可。

(2)前景:現在最大的優勢就是熱更新;對於需要及時更新的部分,可以採用React-Native

(3)目前:相輔相成;未來的話,我希望更多是大部分替代原生。

用React Native 開發APP需要掌握其他哪些技能,除了React Native部分

會一些JS是最好的,掌握一些ES6語法之類的。

三、適用場景相關——技術總是脫離不了使用場景的

RN目前在項目實踐中已知的坑有哪些?假如新開發一個項目,完全使用RN是否可行?另外想了解一下您在項目中使用的程度和場景,謝謝! 

不太建議完全使用RN,因為Facebook也在不斷填坑,每個月都有新版本,一個長期項目經不起頻繁換依賴庫的版本;我們公司也只是作為業餘研究性質,不過RN的熱更新思路真心不錯,可以隨時更換功能模塊。需要注意的是,熱更新和在線更新是不一樣的,分別對應的是 hot-reloading 和 reload,調試時是通過 hot 選項控制;鑑於 hot-reloading 需要和服務器實時保持一個socket長連接和既有的不確定性,我不相信會有公司會採用 hot-reloading 的方案,應用於生產環境。如果真的應用hot-reloading了,那就分享下心得唄。

目前使用React-Native有那些侷限,React-Native更適合開發那些應用?

React-Native還是有些坑需要踩的,現在Github上也能看到Recat-Native源碼庫都有不少開發者在提bug,更新的也很快。目前React-Native做一些內部APP還是可以的;目前對動畫的支持不是很高,這個可以在一些APP中做一些優雅降級;更適合開發那些動畫效果要求不是忒高、組件功能要求相對較少(如果團隊中有OC的開發者可以忽略)的APP。很多坑,我們團隊現在都在踩。

請問React-Native的目前推廣和應用侷限性有哪些?

React-Native技術的推廣可以從公司內存APP試水;邊踩坑邊開發,React-Native的侷限性除了平臺因素,就是對開發者要求較高。當然開發效率來說,應該是很快的。如果團隊中有Object-C成員,相對而言,上手就會輕鬆很多。

現在互聯網公司開發一個新的移動APP,是不是建議使用React-Native

不一定,React-Native是可以減少一些開發成本,但是目前React-Native Android還有很多不完善的地方,目前比較適合做偏UI方面相對簡單的一些需求和功能 。

四、React Native 與其他開發工具、方式對比

想知道,這個與 Phonegap 的比較,包括開發效率,學習曲線,用戶體驗,工具的完善程度等。

Phonegap 和 React-Native 還是不同。React-Native 內部在 iOS7 版本以上採用的是JS Core Engine 解析的,在版本上是降級使用 WebView。React-Native 針對前端開發者上手難度應該不是很大,主要熟悉Flexbox佈局、JSX語法、React-Native API。

這個同跨平臺開源的.NET + C#開發通吃平臺的APP相比,差距在哪裡呢?

你說的應該是指Xamarin吧,這個我有嚐鮮過,收費的商業解決方案,我感覺是主要依賴官方提供的控件和庫,React-Native相對學習成本沒那麼高,畢竟現在做C#的相對小眾,React-Native沒提供的原生控件你可以通過它提供的擴展來自行擴展,開源而且社區相當活躍,我認為前景很廣闊,個人認為要比Xamarin好,性能方面沒對比過,因為我沒買Xamarin的方案。

能從學習週期、開發難度、運行速度方面分析下,AngularJS和React Native的差異嗎?

對我個人來說,我是一個Android開發者,之前沒接觸過Web和JS,Angular我也有看過,Angular學習成本我認為比React高,做APP方面的就是ionic,React是個純UI的東西,React-Native也是,然後提供了和原生APP的擴展模塊,開發週期我感覺對於我來說肯定是React比較快,運行速度方面React-Native是要勝於ionic的。

React-Native開發出來的APP和原生的APP的性能有區別嗎,React Native做出來的安卓APP是不是沒有原生的流暢啊?

React-Native開發效率高於Native;React-Native效率和體驗高於Hybird;React-Native整體性能跟Native差距不大。Facebook給出的性能測試是接近原生的性能,如果不是很複雜的APP,看不出什麼差別,但是如果相對複雜的動畫UI之類的,那肯定還是原生更勝一籌。不過如果只是開發一個功能性APP的話基本沒啥大差別了,畢竟現在的Android手機性能也很好。

用這個你覺得在與我們這幫原生Android App工程師的競爭中,你們最大的技術優勢是什麼,對比原生,你們的劣勢有在何處?

最大的技術優勢:iOS和Android可以一定程度上的代碼公用,減少開發成本和開發週期,可以隨時線上熱更新。 和原生相比的劣勢:目前React-Native Android不適合做相對複雜的動畫效果和UI,體驗上會有一些問題,而且熱更新只是針對純React的模塊,和原生交互的會有原生代碼,熱更新就不好用了。目前我感覺最好的方式還是原生+React的混合開發,根據需求做技術選型。

我們目前在用國內的APICloud來做移動端的開發!我感覺React-Native這個東西相應該沒有APICloud方便吧!還有React-Native和Phonegap應該差不多的吧?

React-Native和Phonegap差很多,React-Native性能接近Native的性能是因為React核心是虛擬DOM,通過diff算法來進行有效的DOM更新,從而突破Web的DOM性能瓶頸。Phonegap,也就是現在的開源方案cordova,它做出來是Hybrid,RN做出來是Native,性能是最大差別,不過如果你的是資訊類應用,不計較性能,團隊又多Web開發人員也不妨考慮cordova。還有你說的APICloud,實際上是給原生APP套了個WebView殼,尤其在Android上會有性能問題。

我感覺最好的方式還是原生開發,雖然需要的精力多了些但最終是值的,你說呢?

這個就看產品和需求怎麼定了,技術選型往往都是跟著產品和需求跑,畢竟技術是服務用戶的嘛,我覺得互惠互利吧。

另外Swift開源後,將來有可能第三方機構開發出Siwft可以同時構建iOS APP的平臺,所以我感覺還是學好Java和Swift比較好一些,混合開發也許以後會好一點,但目前很長一段時間和原生開發還是要差不少吧。

你要說的是Swift同時構建Android APP吧?不排除這種可能,不過目前混合開發還是比較主流的,畢竟BAT和其他一線二線互聯網公司都在用,Web和原生結合可以解決很多產品需求上的問題。

相比其他移動開發,它的優勢是什麼?

RN的優勢在於性能與靈活性的平衡,比Hybrid好的性能,熱更新有比Native好的靈活性。快速做出業務邏輯和UI 基本一致 、性能介於原生和混合的APP。


分享到:


相關文章: