1. 程式人生 > >React native初次使用的各種坑

React native初次使用的各種坑

React Native 是近來最熱門的技術熱點之一,RN的推廣勢必帶來一種新的開發思路,但目前來看RN並沒有預想的發展那樣快,還存在很多問題等待解決,作為Android開發人員瞭解一下RN還是很有必要的

文件

RN開發教程和文件還是很完善的,我是一般直接檢視官方文件。
RN官方文件

這裡寫圖片描述

關於部署環境的步驟就不多做解釋了,按照文件一步步的走下來,就完全ok。

RN坑比較多是一大特點,作為Android開發人員,如果你已經可以預感到RN Android 比RN IOS 坑要多,說明你已經達標了。

DevSettingsActivity

由於許可權問題,RN的彈窗(設定屬性和開發模式的彈窗)需要顯示在其他應用之上的許可權,所以進入到RN專案時,RN檢測到沒有這個許可權的時候,會直接跳轉到DevSettingsActivity,DevSettingsActivity是RN內建的一個native 的頁面。

這裡寫圖片描述

當你期待著一睹RN風采的時候,看到這樣的一個頁面想必是一臉懵逼,其實這個頁面只是需要你授權而已,找到我們的RN專案,點選之後看到下面的這個頁面。

這裡寫圖片描述

開啟授權,返回,按理說你就要看到RN頁面了。

Could not get BatchedBridge, make sure your bundle is packaged correctly

沒想到的是,設定完授權後,返回看到了這樣一個頁面,血紅的背景,熟悉的堆疊結構,還是驚豔到了。

這裡寫圖片描述

這個問題搜遍一搜,就可以搜到很多解決方式,咱們這裡也不是隨便貼一段命令列就結束了,主要還是想深入的瞭解一下這個錯誤是什麼問題。

先說說解決辦法,在終端中,進入到專案的根目錄,執行下面這段命令列:

react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/  

第一次執行這段命令列可能會出現

not find directory

一類的錯誤,其實仔細讀錯誤日誌就可以看得明白是沒有assents目錄,手動建立assents目錄,之後再次執行上面這段命令列。

這裡寫圖片描述

看樣子是正確執行了

再次檢視專案目錄可以看到assents中多出來兩個檔案

這裡寫圖片描述

再次run起來,這個錯誤就完美解決了。

解決是解決完了,回過頭來想一下這個錯誤和assents中的檔案index.android.bundle是做什麼用的,開啟index.android.bundle看看:

這裡寫圖片描述

對於Android開發人員來講,可能覺得這簡直沒有辦法看得出來是什麼程式碼,如果你懂一些js的話,可以看得出來這裡面全是js指令碼,只是為了節省空間,使用了類似於webpack一類的命令,壓縮了原本便於檢視的js程式碼。

RN本就是使用js編寫,使用原生的控制元件來展示的一種策略,又有html的便捷性,又有原生的流暢性。

那這個index.android.bundle毫無疑問就是用來呼叫原生控制元件的js指令碼,每次當你改變了 index.android.js,你都需要使用上面的程式碼片段,來及時的更新index.android.bundle,然後打包才可以把新的index.android.js應用上,所以當沒有index.android.bundle檔案時,RN是無法執行的,到這裡你應該明白了這個問題的來龍去脈了。

RN頁面展示

然後你就看到了讓你賞心悅目的RN hello world頁面

這裡寫圖片描述

怎麼樣,很開心吧。

仔細看RN的說明,你可以發現 To get started, edit index.android.js,意思很明確,你只需要編輯index.android.js就可以更改RN專案,index.android.js是程式的根本。

Double tap R on your keyboard to reload,Shake or press menu button for dev menu。

這樣一段話表明,你可以雙擊“R”來重新載入,也可以點選選單鍵或者是搖晃手機開啟開發選單。

這裡寫圖片描述

到這裡你可能不太明白relaod是幹嘛用的,其實如果你深入的瞭解RN,就會明白,RN很重要的一個特性是不用發版就可以更改一些模組的展示,原理就是更改index.android.js,然後RN專案reload,下載新的index.android.js後,更新index.android.bundle,然後根據index.android.bundle展示新的頁面。

所以我們只要編輯index.android.js,點選reload,就可以更新頁面了,很酷有沒有。

當你點選reload時,又報錯了。

could not connect to development server

血紅的頁面又出現了。

這裡寫圖片描述

頁面雖然很難看,但是錯誤資訊還是比較明確的,只要挨著檢查issue,就可以排查出問題所在。

排查後發現,ip地址不對,目前還是localhost,而不是充當伺服器的PC,所以要設定爭取的ip地址。

晃動手機,喚起設定屬性視窗,點選“Dev settings”:

這裡寫圖片描述

這裡寫圖片描述

在點選Debuug server host 出現設定ip地址視窗

這裡寫圖片描述

填寫你自己的ip地址,如上圖所示。

這樣寫是不對的,你可以仔細看錯誤日誌:

這裡寫圖片描述

填寫ip地址時不要忘記了埠號8081

正確的填寫方式應該是:

這裡寫圖片描述

到這裡你才算是把坑趟的差不多了。

需要注意的小問題

如果你的目標URL是使用了domStorage,這樣的話是需要你設定Webview domStorageEnabled屬性為tru的。

這裡寫圖片描述

否則載入不出來哈

希望能幫到你。

相關推薦

React native初次使用的各種

React Native 是近來最熱門的技術熱點之一,RN的推廣勢必帶來一種新的開發思路,但目前來看RN並沒有預想的發展那樣快,還存在很多問題等待解決,作為Android開發人員瞭解一下RN還是很有必要的 文件 RN開發教程和文件還是很完善的,我是一般直接檢視官方文件

linux平臺安裝React Native遇到的

3年前我在windows平臺安裝過React Native,我一直都記憶猶新,那個時候facebook剛推出支援安卓,然後花了一天的時間在自己的window電腦上配置好了,還是很興奮的,安裝部落格地址如下 現在我的開發環境是ubuntu,所以需要在這個平臺安裝react

記錄VSCode開發React Native的一些

當我們點Debug Android時,會彈出以下錯誤  Could not debug. Unable to set up communication with VSCode react-native extension. Is this a react-native project,

React-native初學者入門集合

一、搭建環境坑 1.首先要安裝android studio這個環境 坑就在於要先下載好jdk,具體配置另一篇有些。就是環境的配置。 其次參考一下連結:[link] (https://www.cnblogs.com/xiadewang/p/7820377.html

react native 的 很多很多!自己已踩完

1. 從後臺傳回來的日期格式可能是這樣(2018-05-04 13:20:09),“-”這個可能轉換時這個時間就會變空。所以我們要這樣做:new Date(data.curriculaTime.replace(/-/g, "/"));—————————————————————

Android 真機搭建 React-Native 環境踩記錄

本文記錄了我搭建 React-Native 專案時踩過的坑(下稱 RN),以及使用 Android 真機執行 RN 專案遇到的問題,供大家參考。 初始化 RN 專案 執行 react-native init [your project name] 命令在本地初始化一個 RN 專案

react-native-camera 填

安裝過程無法編譯, 按以下方法修正A mix of things worked for me.  react: 16.3.1 => 16.3.1  react-native: 0.55.1 => 0.55.1Add the following to your de

react-native-viewpager踩

react-native-viewpager是一個輪播圖元件,最近有一個需求是有一個測試題頁面,我第一反應是用一個輪播圖元件,只是把輪播圖替換成輪播檢視,每個視圖裡面內容比圖片複雜一些而已。。。然而,我只是這麼想想,實際做起來還不知道會遇到什麼坑,開始踩坑

react-native 踩到之 transform skewX skewY

提示,本文不能解決問題,但作為一個坑的記錄,經驗教訓。 rn版本 0.46 眾所周知,transform是用來變換檢視的屬性, 經實踐,transform各個屬性在ios平臺上執行良好,安卓上的表現與ios不一致。 比較嚴重的是在安卓上skewX、skewY比較扯蛋,sk

Android studio for Mac配置React-native時的

最近自己配了一下React native環境,各種坑。以下兩個給我留下了深刻的印象,其實都是這樣一種心情:解決不了超級蛋疼,解決完了覺得自己一定遇到了一個假問題!不多說,請看大螢幕: 1、ndk-build binary cannot be found, check if

React-Native 遇到的

一、錯誤日誌:Warning: Failed child context type: Invalid child context virtualizedCell.cellKey of type nu

react-native整合+填記錄

Gradle Compilecompile "com.facebook.react:react-native:+"許可權新增<uses-permission android:name="android.permission.INTERNET"/> <uses

react-native開發踩之 ios上react-native-vector-icons 的error:unRecognized font family 'FontAwesome'

RN開發過程中使用了第三方圖示庫,由於對iOS也不是特別熟,所以搞了兩天才跨過去,解決完畢後分享一下,畢竟RN開發資源還是比較稀缺的,多一點貢獻是一點。 解決問題首先第一步那絕對是官網找,react-native-vector-icons github連結地址

react native新手踩-遇到warning的相關解決辦法

出現Warning:Failed child context type: Invalid child context 'virtualizedCell.cellKey' of type 'number' supplied to 'CellRenderer',expected

react-native遇到的,及解決方法

2. 新增tabBar 時新增 selected = { this.state.selectedTab === 'FaceMash' }  這句話 ,會報 null not an object(evaluating this.state.selectedTab)  提示

React Native Android 初次試用遇到的各種

React Native 的趨勢 React Native 是近來最熱門的技術熱點之一,RN的推廣勢必帶來一種新的開發思路,但目前來看RN並沒有預想的發展那樣快,還存在很多問題等待解決,作為Android開發人員瞭解一下RN還是很有必要的 文件 RN開

React Native 之Android混合開發,及遇到的各種

最近自己也是剛在學習React Native的知識,在學習到React Native 嵌入到原生應用的時候,感覺遇到了各種坑,這裡做一下記錄。若有說得不對的地方,謝謝大家糾正。 React Native嵌入到原生應用的教程在其官方指導文件裡也有,但是感覺很多注意點沒講到,現

React Native之路 — 執行Android專案的各種(Windows)

之前我們已經初始化了一個Raect Native 專案,驗證了Android環境的正確性,接下來就執行起來吧! 執行命令:        ① react-native start        ② react-native run-android 執行步驟: 1.

win7下react-native安卓打包踩

util 根目錄 2.x exce com tco 解決 研究 sig 都說工具使我們使用更加方便,然而最近研究React-native打包還有webpack這些工具,真是一把心酸一把淚。感覺這些開發工具對window系統十分不友好,外國佬都是都在用mac系統的土豪。 言歸

React-Native開發十 react-navigation開發中的一些常見的

1 前言 都說RN開發效率高,一次學習隨處編寫。真的用RN開發了一個APP才知道,RN中坑真是太多,特別是很多坑只有在生產模式下才會出現,在平常的debug模式下,APP執行好好的,但是你一旦打正式包,就會發現各種報錯,各種崩潰,如果在Android平臺下,各種相容性,各種奇葩的問題