注:本文是我在開發(fā)過程中遇到問題解決方法的總結(jié)篇梭,之后會持續(xù)更新,希望幫助到更多的學(xué)習(xí)者酝枢。文中有不妥的地方希望指出共同學(xué)習(xí)恬偷,同時歡迎大神補充。
錯誤1:
估計是程序中有格式錯誤請自行檢查比如:你注釋出來問題帘睦。
{/*title="張三"*/}
換//title="張三"
錯誤2:
這個說明你要跳轉(zhuǎn)的頁面缺少子控件袍患。所以你要在里面添加?xùn)|西比如加個:<View></View>
警告3:調(diào)試警告
看下報的警告就知道調(diào)試程序在這個窗口導(dǎo)致運行緩慢,所以建議你換一個單獨新的窗口進行調(diào)試
警告4:
解決方法就是你的Xcode沒有適配HTTPS iOS9的
加上:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
錯誤4:
這個很神奇竣付。遇到了不要緊張多按 ?R幾下或者把模擬器上的項目刪除之后重新加載一般就會解決
錯誤5:
認真看下錯誤信息诡延,上面說你忘記返回值了 所以你的函數(shù)中少了一個return();
錯誤6:
如果你檢查代碼確實沒有錯誤古胆。還報這個錯肆良,那就說明你的端口被占用了。打開終端逸绎,切換到項目目錄惹恃。執(zhí)行react-native start
如果出現(xiàn)
Packager can't listen on port 8081
那說明端口被占用了。:根據(jù)命令行提示進行操作:
1.
lsof -n -i4TCP:8081
列出被占用的端口列表2.
kill -9 <PID>
找到與之對應(yīng)的PID然后刪除即可
錯誤7:
SyntaxError: SyntaxError /Users/zhaopengsong/Desktop/ReactNative/BuyDemo/Component/Main/ZPMain.js: JSX value should be either an expression or a quoted JSX text (107:22)
語法錯誤棺牧,JSX語法必須用{}對變量進行賦值:如title=titleName
換為title={titleName}
或者檢查下有沒有其他的語法錯誤巫糙,比如少了逗號
多了分號
這些低級錯誤
錯誤8
Requiring unknown module "undefined".If you are sure the module is there, try restarting the packager or running "npm install"
這個錯誤我的解決思路是:之前改過什么,撤回陨帆,一般是用到了錯誤的react-native 方法導(dǎo)致的曲秉。
錯誤9:
原因:沒有啟動后臺react-Native 服務(wù)。即終端
錯誤10:
如果你遇到了列如九宮格不自動換行的情況疲牵,檢查一下樣式里面有沒有這兩句話flex-start:交叉軸的起點對齊承二。``wrap:換行,第一行在上方纲爸。
錯誤11:
ExceptionsManager.js:63 Expected a component class, got [object Object]
解決方法:
You need to rename your
commonView
class to CommonView
, the class must be capitalize
錯誤12:
這是你請求的URL錯誤亥鸠。要是https://
的才行。
錯誤13:創(chuàng)建新項目识啦,react-native init 項目名命令長時間無響應(yīng)负蚊,或報錯shasum check failed
react-native命令行從npm官方源拖代碼時會遇上麻煩。請將npm倉庫源替換為國內(nèi)鏡像:
npm config set registry https://registry.npm.taobao.org --global
npm config set disturl https://npm.taobao.org/dist --global
另颓哮,執(zhí)行init時切記不要在前面加上sudo
錯誤14:修改8081默認端口號的兩種方式
(1)啟動項目時react-native start --port 8083
(2)手動修改項目下的node_modules\react-native\local-cli\server\server.js下的方法server.js文件家妆,如下圖所示。
錯誤15:
Application NewsDemo has not been registered.
This is either due to a require() error during initialization
or
failure to call AppRegistry.registerComponent.
錯誤原因是端口沖突冕茅。解決方法是看錯誤14
其次解決方法是:
1伤极、終端
2蛹找、cd 到項目目錄
3、react-native start
4哨坪、lsof -n -i4TCP:8081 //這句可以看打印出8081端口下的服務(wù)
5庸疾、kill -9 <PID> //終止你其他占用端口
如圖:
錯誤16:
如果你遇到了這個問題,并解決了当编。希望能在下面留言幫助更多的人届慈。感謝!(我的錯誤原因是require路徑出錯忿偷,我是換用URI 加載image資源解決的) 類似問題解決方法見 issues
錯誤17:
錯誤出現(xiàn)執(zhí)行react-native run-ios
出現(xiàn)下面錯誤
Failed to install the requested application
An application bundle was not found at the provided path.
Provide a valid path to the desired application bundle.
Print: Entry, ":CFBundleIdentifier", Does Not Exist
Command failed: /usr/libexec/PlistBuddy -c Print:CFBundleIdentifier build/Build/Products/Debug-iphonesimulator/ReactNativexx.app/Info.plist
Print: Entry, ":CFBundleIdentifier", Does Not Exist
解決方法:
1金顿、新建項目指定版本:
用--version
參數(shù)創(chuàng)建指定版本的項目屉符。例如react-native init DemoApp --version 0.44.3
注意版本號必須精確到兩個小數(shù)點负蠕。
項目創(chuàng)建好之后:執(zhí)行:react-native run-ios
2、嘗試reset一下 模擬器之后再react-native run-ios
3枉圃、嘗試執(zhí)行
react-native upgrade
然后一路enter再
react-native run-ios
試試芜壁?解決方法參考鏈接:連接1,連接2
3礁凡、在這里感謝:LeeyaWang 提供自己的解決思路:希望對之后遇到此問題的同學(xué)有所幫助!
步驟是:
1慧妄、首先刪除node_modules
2顷牌、修改package.json中react-native的版本為0.44.3 react為16.0.0-alpha.6
3、react-native run-ios 就可以啦 后來是出現(xiàn)我發(fā)你的問題 我覺得 應(yīng)該是我這邊vpn的問題塞淹,所以我重啟了一下電腦 然后重置了模擬器 就可以了
友情提示: 如果你用的ReactNative版本為0.45.1窟蓝,新建項目之后運行出現(xiàn)這個錯誤:
'boost/iterator/iterator_adaptor.hpp' file not found
錯誤原因: 0.45需要下載boost編譯,因為被墻了所以會無法運行饱普。
解決方法:
方法1运挫、
第一步:將項目中的
package.json
文件修改為這樣:第二步:修改完成之后刪除
node_modules
文件夾在終端run:npm install
第三步:執(zhí)行:
react-native run-ios
方法2、新建項目指定版本:
用--version
參數(shù)創(chuàng)建指定版本的項目套耕。例如react-native init DemoApp --version 0.44.3
注意版本號必須精確到兩個小數(shù)點谁帕。
項目創(chuàng)建好之后:執(zhí)行:react-native run-ios
錯誤18:
解決:
var View = React.View;
/* later... */
propTypes: {
...View.propTypes,
myProp: PropTypes.string
}
錯誤19:(這個錯誤我的解決方法是新建項目,把組件放到新項目冯袍,重新安裝第三方匈挖,然后run
,雖然笨了點,但是問題解決了康愤。)
啊儡循。。征冷。择膝。。這個問題讓我頭痛死了[來看看GitHub上的討論]
哪位大神知道便捷的解決方案希望評論給出检激!感激调榄!
(https://github.com/facebook/react-native/issues/4968)
嘗試解決:1踊赠、react-native link
||rnpm link
一下然后再安裝
react-native run-ios
遇到:
錯誤20:
Application textDemo has not been registered. This is either due to a require() error during initialization or failure to call AppRegistry.registerComponent.
解決方案:
1呵扛、是注冊的時候?qū)戝e了每庆。也就是這段話注冊的不對:
AppRegistry.registerComponent('textDemo', () => textDemo);
注意:‘textDemo’這個是項目名 textDemo這個你可以隨自己你喜好指定。
2今穿、很有可能是8081端口被占用了
你可以嘗試:切換到項目所在目錄缤灵,輸入react-native start
如果出現(xiàn)Packager can't listen on port 8081
那說明端口被占用了。
根據(jù)命令行提示進行操作:
1.lsof -n -i4TCP:8081
or sudo lsof -n -i4TCP:8081
列出被占用的端口列表
2.kill -9 <PID>
or sudo kill -9 <PID>
找到與之對應(yīng)的PID然后刪除即可
3.重新運行項目 react-native run-ios/android
錯誤21 :
如果你項目中頻繁遇到:
'RCTRootView.h'file not found.
RCTBridgeModule.h file not found
解決方法:
1蓝晒、添加link :$(SRCROOT)/../node_modules/react-native/React
2腮出、到項目目錄下
sudo npm install
試試。3芝薇、
#import "RCTBridgeModule.h"
換為
#import <React/RCTBridgeModule.h>
警告22??:
安裝的過程中可能會遇到UNMET PEER DEPENDENCY的錯誤
解決辦法就是在安裝的時候 指定具體的版本安裝:
sudo npm install -g react@~15.4.1
這個警告:
npm WARN react-native@0.42.3 requires a peer of react@15.4.1 but none was installed.
解決:
npm install –save react@15.4.1
警告23??:屏蔽OS_ACTIVITY_MODE.log
react-native 運行應(yīng)用xcode打印log__nw_connection_get_connected_socket_block_invoke Connection has no connected handler
解決方法:
1. Xcode menu -> Product -> Edit Scheme...
2. Environment Variables -> Add -> Name: "OS_ACTIVITY_MODE", Value:"disable"
3. Run your app again, done! 這樣就沒問題了
圖示:
錯誤24:
Unable to resolve module `react/lib/ReactComponentWithPureRenderMixin` from
`/Users/song/Desktop/ReactNativeRouterFlux/node_module
s/react-native-experimental-navigation/node_modules/react-addons-pure-render-mixin/index.js`:
Module does not exist in the module map or in these directories:
解決:
類似這種錯誤胚嘲,就是缺少模塊,通過npm i react-addons-pure-render-mixin -S 命令即可洛二,標記部分是你缺少的模塊名馋劈。
如果這樣解決不了問題,那你需要降低的的RN版本晾嘶〖宋恚可能版本過新了。
1垒迂、查看你的版本:react-native --version
2械姻、安裝適當?shù)陌姹荆?code>npm install --save react-native@0.42.3
3、更新一下模板:react-native upgrade
錯誤25
RCTSRWebSocket.m報錯
Ignoring return value of function declared with warn_unused_result attribute
這個報錯在此文件中有兩處机断,代碼
SecRandomCopyBytes(kSecRandomDefault, sizeof(uint32_t), (uint8_t *)mask_key);
修改為
(void)SecRandomCopyBytes(kSecRandomDefault, sizeof(uint32_t), (uint8_t *)mask_key);
前面加上(void)
楷拳。
RCTScrollView.m 報錯
Use of undeclared identifier '_refreshControl'; did you mean 'refreshControl'?
解決:
@implementation RCTCustomScrollView
{
__weak UIView *_dockedHeaderView;
RCTRefreshControl *_refreshControl; // 加入此行
}
警告26??:
[ReactJS Warning: Each child in an array or iterator should have a unique “key” prop]
遇到這個警告說明你的多個視圖數(shù)組需要給個KEY標示!
可以給每個控件加上Key這樣寫:
<Text key={0} style={{ position:'absolute', width:imgwidth,height:imgheight,top:64+Y,left:X,fontSize:parseInt(layoutData.fontsize)}}>{texts}</Text>
錯誤 27:Warning: Failed prop type: Invalid prop source
supplied to RCTImageView
OR
ExceptionsManager.js:71 Warning: Failed prop type: Invalid prop source
supplied to Image
.
解決:這個錯誤的原因是你給Image 的Source 有問題 比如不是一個URI 吏奸,查看一下不是不傳入了一個對象像這樣欢揖。
錯誤28:
RN iOS 0.45以上版本開始需要依賴一些第三方編譯庫,這些庫在國內(nèi)下載都非常困難(一般的翻墻工具都很難下載)未來RN不同版本可能依賴不同版本的第三方編譯庫苦丁,具體所需庫和版本請查看[ios-install-third-party.sh](https://github.com/facebook/react-native/blob/master/scripts/ios-install-third-party.sh)文件浸颓,注意先把左上角的branch切換到對應(yīng)的版本
boost/iterator/iterator_adaptor.hpp' file not found
錯誤29 Android 項目啟動報這個錯誤:Could not connect to development server
首先檢查包服務(wù)器是否運行正常。
在項目文件夾下輸入react-native start或者npm start均可開啟服務(wù)器旺拉,但是我們需要在PC端確認包服務(wù)器是否運行正常产上。
解決: 1.手機搖一搖進入到Developer Menu 如圖:
2.選擇 Dev Settings 如圖:
3.填寫 你的服務(wù) IP 記得端口為:8081
4.點擊確定之后重新啟動項目, reload 搞定
30 錯誤
TransformError: /Users/xxxxt/index.ios.js: Unexpected token ) (While processing preset: \"/Users/xxx/node_modules/babel-preset-react-native/index.js\")"
解決方法:
yarn remove babel-preset-react-native
yarn add babel-preset-react-native@2.1.0
31 unrecognized font family material icons
解決方法:
1.Close the running packager
2.Run react-native link react-native-vector-icons
3.Then run react-native start --reset-cache
4.Finally run react-native run-ios
to restart the simulator
32
undefined is not an object (evaluating NativeModuels.UIManager.RCTVideo.Constants')
依次執(zhí)行:
1.
npm i -S react-native-video
2.
react-native link
3.
然后重啟模擬器試(也可以把應(yīng)用從模擬器刪除clean 之后重新 run)試我是這樣好的
可參考issues
33 如果uninstall 第三方庫之后然后 install xcode 報錯linker command failed with exit code 1 (use -v to see invocation)
解決方法:
1.別慌
2.檢查一下是不是 install 的時候沒有刪除module 直接 install 導(dǎo)致的多了或者少了.a文件,我的是這樣解決的.
34 underfined is not an object(evaluating 'viewproptypes.style')
解決方法:一.
https://github.com/facebook/react-native/issues/14032
看完之后,解決了問題蛾狗。
解決方式如下:
找到node_modules目錄下的react-native-scrollable-tab-view晋涣,將所有js文件中有
ViewPropTypes.style 改為 View.propTypes.style
解決方法二.對于舊項目 三方庫較多不好修改
就是新建一個項目,然后把組件放到新項目中.重新 yarn add 一下你所有的庫.
如果你只改 RN 版本可能會有其他組件版本跟不上.這樣就確保都是最新的版本了
這個方法我已經(jīng)驗證過可以的
35 : 舊項目升級到RN 0.47.1 + 之后出現(xiàn)這個問題
Navigator is deprecated and has been removed from this package. It can now be installed ' +
'and imported from `react-native-deprecated-custom-components` instead of `react-native`. ' +
'Learn about alternative navigation solutions at http://facebook.github.io/react-native/docs/navigation.html'
解決:
1.根據(jù)提示:
2.找到對應(yīng)
JS
文件找到并刪除:3.添加:
import {Navigator} from 'react-native-deprecated-custom-components'
4安裝
yarn add react-native-deprecated-custom-components
5.run 就搞定了
36: props的使用以及propTypes填坑undefined is not an object (evaluating '_react2.PropTypes.string')
(群友:@Dennis 提供參考連接) 錯誤詳情如圖:
37 : No bundle URL present.
解決方法:
首先:
npm install
react-native run-ios
然后看看你是否開著Shadowsocks,VPN
之類的.關(guān)掉重新 Run
試試
38:Redefinition of 'RCTMethodInfo'
如果你使用的是最新的 RN 版本.建議切換為目前相對穩(wěn)點的0.47.2版本
解決方案參考 issues
解決方案參考 issues
39 react-native 低版本升級到0.49以上版本時遇到
Script-00DD1BFF1BD5951E006B06BC.sh: line 3: ../node_modules/react-native/packager/react-native-xcode.sh: No such file or directory
解決方法:
1.打開 Xcode Build Phases > Bundle React Native code and images
2修改export NODE_BINARY=node ../node_modules/react-native/packager/react-native-xcode.sh
為export NODE_BINARY=node ../node_modules/react-native/scripts/react-native-xcode.sh
40 當使用 State 報錯
undefined is not an object evaluating this.state.
方法一:
在方法調(diào)用的時候添加
.bind(this)
如方法二:在構(gòu)造函數(shù)中添加綁定
方法三: 或者使用箭頭函數(shù).
()=>{}
方法有很常用的這幾種
41 如果你頻繁出現(xiàn)這個錯誤,
nvariant Violation: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: object.
同時出現(xiàn)這個警告:Can only update a mounted or mounting component. This usually means you called setState, replaceState, or forceUpdate on an unmounted component. This is a no-op.
解決方法:
一.是查看導(dǎo)入的工具類是否
var xxxx = require('../Utils/ZPxxxx');
這樣加入的, 如果是你那就傻逼了改成這樣試試import xxxx from '../Utils/ZPxxxx';
同時警告是因為:你在一個被卸載的組件里調(diào)用setState方法.檢查一下生命周期一般沒啥影響
感謝群友@勿念 丫頭 提醒我這里在詳細解釋一下
導(dǎo)出單個類:
在ES5里,要導(dǎo)出一個類給別的模塊用沉桌,一般通過module.exports來導(dǎo)出
//ES5
var ZPxxxx = React.createClass({
...
});
module.exports = ZPxxxx;
在ES6里谢鹊,通常用export default來實現(xiàn)相同的功能:
//ES6
export default class ZPxxxx extends React.Component{
...
}
引用的時候也類似:
//ES5
var ZPxxxx = require('./ZPxxxx.js');
//ES6
import ZPxxxx from './ZPxxxx.js';
42 如果你在跳轉(zhuǎn)頁面的時候經(jīng)常遇到undefined is not an object (evaluating 'this.props.navigation.navigate')
解決方法見 GitHub issues 這里面有詳細的解釋和介紹@matthamil解釋很到位!
react-Navigation使用詳解:
Screen-Navigation-Prop
43項目 Run的時候經(jīng)常報:Failed to load bundle(http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false) with error:(Could not connect to development server. Ensure the following: - Node server is running and available on the same network - run 'npm start' from react-native root - Node server URL is correctly set in AppDelegate - WiFi is enabled and connected to the same network as the Node Server
解決方法
1: 啟動項目的服務(wù):react-native start
或者npm start
;然后早 Com+R
;
2:上面的方法沒有解決,而且長時間不能啟動還報以上錯誤:
在 xcode ->build phases -> bundle react-native code and image
->添加
export DISABLE_XIP=NOTHANKS
或者:export DISABLE_XIP=true
原因詳細介紹見 GitHub issue
解決方法二: sudo react-native start
輸入密碼 run
44 優(yōu)化打包速度(真機運行速度)
原因
就是react-native-xcode.sh
. 每次打包安裝都重新把RN文件打包成main.jsbundle
, 在機械硬盤的渣渣電腦上操作那數(shù)以萬計個的文件,所以會很慢
解決:
找到:
這個腳本
react-native-xcode.sh
在最頭上加上
if [ "$CONFIGURATION" = "Debug" ]; then
echo "--- Skip bundle building in 'Debug' mode"
exit 0
fi
或者:
DEST=$CONFIGURATION_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH
if [ "$CONFIGURATION" = "Debug" ] && [ -f "$DEST/main.jsbundle" ]; then
echo "--- Skip bundle building in 'Debug' mode"
exit 0
fi
這樣真機測試的手安裝就會快了.
注意 :如果你是打包需要注意修改代碼后
,需要Command+Shift+K清除工程緩存, 重新Build, 生成新的main.jsbundle.
45 如果你執(zhí)行 react-native init AwesomeProject
報錯
info No lockfile found.
[1/4] ?? Resolving packages...
warning react-native > fbjs-scripts > gulp-util@3.0.8: gulp-util is deprecated - replace it, following the guidelines at https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5
error An unexpected error occurred: "Couldn't find package \"esutils@^2.0.2\" required by \"babel-code-frame@^6.26.0\" on the \"npm\" registry.".
...
...
stderr: null,
stdout: null,
pid: 26012,
output: [ null, null, null ],
signal: null,
status: 1 }
Command `yarn add react-native --exact` failed.
解決方法: npm config set registry https://registry.npmjs.org
如果下載過慢就用這個npm config set registry https://registry.npm.taobao.org
46 警告 使用 sectionlist 遇到
Warning: Failed child context type: Invalid child context `virtualizedCell.cellKey` of type `number` supplied to `CellRenderer`, expected `string`.
消除方法:keyExtractor={(item, index) => index.toString()}
47 Android 項目 run 遇到 React Native Version Mismatch
Javascript version 0.54.4和 native 0.55.4 版本不一致 :
解決方法如下:
進入:android/app/build.gradle文件算吩,找到dependencies代碼塊,添加 這里要和你 Javascript 版本一致
dependencies {
compile ("com.facebook.react:react-native:0.54.4") { force = true }
}
48 項目運行遇到:
No component found for view with name "ARTShape"
No component found for view with name "ARTSurfaceView"
解決方法是:
1).xcode中打開ios項目佃扼,選中‘Libraries’目錄—> 右鍵選擇‘Add Files to 項目名稱’ —> ‘node_modules/react-native/Libraries/ART/ART.xcodeproj’ 添加偎巢;
2).選中項目根目錄 —> 點擊’Build Phases‘ —> 點擊‘Link Binary With Libraries’ —> 點擊左下方‘+’ —> 選中‘libART.a’添加。
49 如果真機運行出現(xiàn)
Showing All Messages error: File xx/BuildProductsPath/Release-iphoneos/xx/main.jsbundle does not exist. This must be a bug with
解決方法:(建一個就好了)
sudo react-native bundle --entry-file index.js --bundle-output ./ios/main.jsbundle --platform ios --assets-dest ./ios --dev false
原創(chuàng)文章轉(zhuǎn)載需注明出處
更多相關(guān)文章專題: