1. 程式人生 > >與程式碼無關的React Native常識

與程式碼無關的React Native常識

最近想學習下React Native,用JavaScript來編寫Android app。在寫程式碼之前,先搞明白幾個問題:用什麼開發工具比較好?React Native的原理是什麼,開發的App效能和原生應用一樣好麼?

搭建開發環境

React Native CLI

安裝Node.js,通過npm命令安裝React Native:

npm install -g react-native-cli

Visual Studio Code

程式碼編輯器可以選擇VSCode,因為可以找到很多擴充套件外掛。

react native editor

Android Studio

安裝Android Studio。按照React Native的要求,開啟Android SDK Manager安裝6.0相關的包。

react native android sdk manager

React Native ‘Hello World’

使用命令列來建立一個新的工程:

react-native init helloworld

建立之後的工程目錄結構:

react native new

在手機或者模擬器上執行程式。注意:只能有一個裝置連線著

react-native run-android

react native ui

在執行程式的時候,首先會啟動React Packager。React Packager會編譯index.android.js檔案。

react native hello world

Hot reloading

如果程式執行在模擬器上,只需要雙擊鍵盤上的R就可以重新載入修改的程式碼。如果程式碼執行在手機上,需要先搖晃一下手機,調出選單,然後選擇重新載入。不過這樣比較麻煩。所以在選單上可以啟用hot reloading避免每次都要搖晃手機來點選選單。

小米手機上無法執行程式怎麼辦

開啟設定>更多設定>開發者選項>關閉‘啟用MIUI優化’,重啟裝置就可以了。

React Native的工作原理

React Native使用JavaScript core作為JavaScript引擎。通過解析JavaScript介面,找到對應的Native介面。因此React Native建立的移動app效能和原生沒有差別。我們可以開啟編譯出來的APK檔案一探究竟。

APK檔案

React Native編譯工程之後會生成helloworld\android\app\build\outputs\apk\app-debug.apk。開啟這個APK檔案看一下有什麼:

react native apk

react native libs

在lib目錄中可以看到有很多的*.so庫檔案,其中就包含了libjsc.so,也就是JavaScript的引擎。

JavaScript資原始檔

在app-debug.apk檔案中似乎沒有看到任何和JavaScript程式碼相關的檔案,這是什麼情況?試一下單獨安裝app-debug.apk然後直接執行。你會發現無法執行程式。因為React Packager沒有啟動。我們安裝在手機上的只是一個客戶端程式,它必須和遠端的服務端通訊來更新程式碼修改。app-debug.apk並不是真正的應用安裝包。

用下面的命令來構建一個完整的app包:

cd android
gradlew assembleRelease

一個新的APK檔案會生成在helloworld\android\app\build\outputs\apk\ app-release-unsigned.apk

開啟這個APK比較下,可以發現多了asset資源目錄:

react native asset

把這個APK簽名之後就可以釋出到app市場了。

React Native的元件資源

React Native有很多自定義的元件,可以在js.coach上搜索下載。

學習視訊

如果可以訪問YouTube,可以看下這個視訊:

不用Android Studio和Xcode也可以開發React Native應用

Facebook最近又釋出了一個新的工具Create React Native App。有了這個工具,開發者不需要安裝Android Studio和Xcode就可以開發React Native應用了。

npm i -g create-react-native-app
create-react-native-app helloworld
cd helloworld
npm start

命令列執行之後會生成一個二維碼。在手機上先安裝Expo app,然後掃描二維碼來載入程式。原理和app-debug.apk是一樣的,這只是一個客戶端。你需要保證手機和PC在同一個區域網下。

安裝Expo App

如果你是iOS開發者,Expo app安裝很簡單,在iTunes上可以找到。如果你需要安裝Android版本,需要用Google Play安裝。如果無法訪問Google Play,可以用APKDOWNLOADER來下載Google Play上的APK。Expo app的包名是host.exp.exponent

看下這個工程和React Native命令生成的有什麼差別:

react native project comparison

這裡沒有Android目錄以及index.android.js檔案。

需要注意的是使用這個工程開發,只能使用JavaScript。如果需要用到native code,要把工程轉換成React Native工程。這個過程不可逆。執行命令:

npm run eject

react native expo eject

再比較下結構:

expo eject project structure

現在差不多一樣了。執行程式:

react-native run-android

相關推薦

程式碼無關React Native常識

最近想學習下React Native,用JavaScript來編寫Android app。在寫程式碼之前,先搞明白幾個問題:用什麼開發工具比較好?React Native的原理是什麼,開發的App效能和原生應用一樣好麼? 搭建開發環境 React Native CLI 安裝Node.js,通過npm命令

react-native-pg-style使用方法(以最簡單的方式編寫樣式程式碼,拋棄react-native標準的樣式建立方式.)

react-native-pg-style 以最簡單的方式編寫樣式程式碼,拋棄react-native標準的樣式建立方式. 看大家寫的原始碼中都是按照react-native標準的樣式建立方式來寫樣式程式碼的,樣式程式碼就佔了大概四分之一,甚至三分之一的程式

REACT NATIVE 系列教程之十一】外掛的安裝、使用更新(示例:REACT-NATIVE-TAB-NAVIGATOR)

本篇主要來詳細介紹如何安裝、升級外掛及講解一個react-native-tab-navigator的示例。本文舉例使用的外掛:react-native-tab-navigator ,選項卡形式的導航1. 通過  https://www.npmjs.com 找到我們想使用的外掛, 搜尋:react-native

Angular團隊公布路線圖,並演示怎樣React Native集成

content ogl date pda andro 演講稿 服務 團隊 stat 本文來源於我在InfoQ中文站翻譯的文章,原文地址是:http://www.infoq.com/cn/news/2015/06/angular-2-react-native-roadmap

React Native中的DeviceEventEmitter.addListenerDeviceEventEmitter.emit

ice navigator 訂閱 shu reac 如何 沒有 解釋 http   官方文檔沒有對這兩個方法做很好的解釋,需要自己找資料研究。看了幾篇文章,總結是和訂閱發布模式差不多,用來事件監聽發送的。 React Native學習之DeviceEventEmitter傳

React Native在特贊的應用實踐

使用 anywhere node.js 交互操作 網關 初始 andro -- 所有 基於React技術棧構建開發前端項目,並使用React Native開發特贊移動APP 目前正在使用Node.js開發和維護特贊服務網關,希望Node.js能夠在更輕量級的微服務架構中發

React-Native系列》3、RNnative交互之Callback、Promise

pan resolv str string callback 多次調用 modules 函數 等待 接著上一篇《React-Native系列》RN與native交互與數據傳遞,我們接下來研究另外的兩種RN與Native交互的機制 一、Callback機制 首先Calllba

React-Native系列》RNnative交互數據傳遞

lis 寫博客 android undle tco intent pack instance isa RN怎麽與native交互的呢? 下面我們通過一個簡單的Demo來實現:RN頁面調起Native頁面,Native頁面選擇電話本數據,將數據回傳給RN展示。 首先是 Nat

react native 中函數Share示例說明

dia android中 truct ror com title radi ops res /** * 函數Share(用於在Android設備上打開一個對話框來分享或發送文本內容) * */import React,{PureComponent} from ‘react

react native 中函數ToastAndroid示例說明

ive opacity .sh border 原生 return justify style render /** * 函數ToastAndroid(用於在Android設備上顯示一個懸浮的提示信息) * */import React,{PureComponent} fr

React-Native系列Android——NativeJavascript通信原理(一)

from 直接 最新 一點 明顯 rem 負責 receive esp React-Native最核心的是Native與Javascript之間的通信,並且是雙向通信

React-native 環境配置過程搭建項目問題匯總

mac ack 安裝 key oid yarn style blog cli 首先,最好參照來源當然是來自於開源代碼本身的文檔: https://reactnative.cn/docs/getting-started/ 一、初始環境搭建 1.環境組件 由於從網上查

React-Native開發九 react-navigation之Android的打包釋出

1前言 RN的開發中正式釋出前需要打包與簽名,然後才能上架各家應用市場。打包需要將js與圖片資原始檔打包進apk檔案中,生成index.android.bundle與index.android.bundle.meta檔案。下面介紹RN開發中打包APK的主要步驟,IOS沒研究過,不再本

React Native 中為IOS和Android設定不同的Style樣式,一套程式碼解決雙端顯示

React Native 開發中,大多數的元件都是IOS和Android通用的,包括大量的功能性程式碼,至少有80%以上的程式碼可以複用,而剩下的一些元件樣式/少量的程式碼會需要區分雙端,但是為了這少量的程式碼把IOS和Android完全區分這明顯不合適,程式碼複用性下降,程式碼維護量上升

基於React Native官方元件ScrollViewReact-Navigation實現headerTitle介面的滑動的互動效果react-native-scrollable-contain

react-native-scrollable-container 基於React Native官方元件ScrollView與React-Navigation實現headerTitle與介面的滑動的互動效果 Installation npm install react-nat

程式碼重定位004_程式碼重定位位置無關

https://blog.csdn.net/u011663005/article/details/81042699?utm_source=blogxgwz3 http://blog.sina.com.cn/s/blog_14f1cd81a0102xb9a.html 全域性變數和靜態變數初

[Android] React Native技術精講高質量上線APP開發 多棧技術

【多棧技術更有競爭力】本課程將手把手帶你用RN技術開發、優化、直到最後釋出上線一款完整的跨平臺APP;讓你擁有一次真正參與上線專案開發的歷程,同時全面掌握React Native技術,使你的技術能力和專案經驗都得到前所未有的提升! https://pan.baidu.com/s/1p4c

一個RNDemo(React Native 0.57.3 + ES6)實現(包含RN原生相互跳轉和通訊)

一個RNDemo(React Native 0.57.3 + ES6)實現(包含RN與原生相互跳轉和通訊) 原始碼下載地址 RNDemo(RN0.57.3+ES6) iOS原生專案(Objective-C)整合React Native(0.57.3版本)圖文教程–(1)基本環境

一次掌握 React React Native 兩個框架

此係列文章將整合我的 React 視訊教程與 React Native 書籍中的精華部分,給大家介紹 React 與 React Native 結合學習的方法。 1. 軟體開發語言與框架的學習本質 我們在開始系列文章的技術點內容前,花一點時間探討一下軟體開發語言以及框架的學習本質,相對於整個技術點的講解,花這

React NativeAndroid的互動

在使用RN進行跨平臺開發的過程中,經常會設計到跨平臺呼叫相關的內容,而在於RN進行互動的時候,最核心的就是RN提供的Component和Module。 其中,Component是專門將Native的UI暴露出來供JS呼叫的,而Native Module則是將N