2017-01-23 74 views
4

對於React Native如何工作,我還是很困惑。也許是因爲我在移動開發方面沒有足夠的背景(儘管我嘗試過一兩次原生Android)。什麼是「本機」,什麼不在React Native項目中?

如果我沒有錯,像Phonegap或Ionic這樣的混合框架將在'WebView'中運行整個項目(或大部分),我錯了嗎?

儘管React Native等本機框架旨在使用本地資源,而不是純粹的Web技術。

但是我們仍然在寫JavaScript,而React Native很快完成這項工作,它可能仍然使用我們剛纔寫的Javascript(我的意思是,它不是解析,翻譯爲本地代碼並重新編譯)。

我想到的問題是,本地資源究竟是什麼,什麼不在React Native項目中?我們編寫的Javascript在不在'webview'的情況下運行在哪裏?有兩個本地庫爲這兩個平臺創建Javascript到Objective-C和Java的接口?在Web解決方案中,它只是在WebView中注入整個代碼?

附加問題:我們能否考慮React Native是一個混合框架,因爲我們爲許多不同的平臺編寫一個代碼,或者它不是正確的術語?

回答

5

如果我沒有錯,喜歡的PhoneGap或離子混合框架將運行整個項目(或大部分)在「 WebView',我錯了嗎?

是的。 Phonegap和Ionic使用PhoneGap(實際上是Cordova)作爲框架的一部分,使用HTML,CSS和JavaScript來呈現UI。除此之外,唯一的連接(據我所知)是Cordova提供給設備本地API的訪問(例如,考慮傳感器)。

儘管本機框架(如React Native)旨在使用本地資源,而不是純粹的Web技術。

是的,RN的方法是讓開發人員在保留原生開發(性能,感覺和外觀等)的好處的同時使用JavaScript和React框架。

但我們還是編寫JavaScript,並做出反應原住民如此之快,它很可能還是使用我們剛纔寫的JavaScript做這項工作(我的意思是,它不是解析,轉換爲本地代碼並重新編譯)。

下面是我認爲您的誤解所在:您必須將React Native視爲仍依賴iOS/Android/Windows本機API的本機應用程序與JavaScript代碼段之間的「橋樑」。該橋授予對這些API的JS訪問權限,並關心呈現UI和其他不同的本地方面,以及提供相反方向(從Native到JS)的數據。 JS代碼永遠不會「轉換」爲Java或Swift/Obj-C。它的執行方式與編程相同。但是,您可能會要求RN使用JavaScript中的某個本地組件(例如,<Text>將在iOS中實例化一個UILabel))。然後,該庫使用少量組件(如佈局,視圖,控件等)來實現此方法,但要領仍然如上所述。

我想到的問題是,原生資源究竟是什麼,什麼不在React Native項目中?

所以......基本上,任何用JavaScript編寫的東西都不會是本機的,但通過它的執行,你可以獲得本地組件。您直接使用本地API編程的任何東西(這是RN的優勢之一,如果您覺得自己可以繼續開發,或者某個本地組件未在庫中實現),則可以將其視爲「原生」。

如果不是'webview',我們寫的Javascript運行在哪裏?有兩個本地庫爲這兩個平臺創建Javascript到Objective-C和Java的接口?

如前所述,React Native JS和Objective-C之間的接口。 JavaScript不會在任何時間呈現在WebView中。

在Web解決方案中,它只是在WebView中注入整個代碼?

React Native不適用於網絡...除非您使用this

額外的問題:我們可以考慮React Native是一個混合框架,因爲我們爲許多不同的平臺編寫一個代碼,或者它不是正確的術語?

嗯......我想說一個混合框架是一個結合了不同開發資源(比如說Web技術和本地API)的工具。在這種情況下,React Native會屬於該類別。我不會稱之爲混合,因爲它可以在多個平臺上工作(我簡單地稱之爲多平臺)。

+0

您是說UI組件將由每個平臺的本地組件支持?例如,RN中的ListView會在Android中注入ListView佈局? 更具體一些,當我在RN中的React代碼中添加一個ListView並重新運行應用程序時,就Android而言,它會以編程方式實例化一個新的Android ListView並將其附加到Layout中? 這是這個想法嗎? –

+0

是的,這正是它所做的。 – martinarroyo

+0

你在這裏提到Windows,但據我所知,RN不支持Windows手機 – HendraWD

0

根據我的知識 本地資源是框架/操作系統(Android/iOS)純粹給出的組件。 您必須具備各自的Android/iOS知識才能製作本機用戶界面。

即將到來的ReactNative,它將使用您的JavaScript或HTML代碼創建/生成Native組件。 我可以說,它把你代碼的命令來生成所需的本地組件

相關問題