今天首次尝试使用RN,真的是困难重重,一不小心就漂一片红,真是心力交瘁。
首先是跟着官网这一篇教程学习的https://facebook.github.io/react-native/docs/integration-with-existing-apps.html 在现有iOS项目中添加RN,项目中只是部分页面需要使用RN,而不是全部页面。
按照上面一步步来流程是没有什么问题,只是当你想把项目跑起来的时候,肯定会遇到问题,因为这篇文档上缺少了一些步奏,下面是我按照这个教程学习RN,遇到的一些问题和解决办法,如果你也遇到了相同的问题,希望能帮到你。
一、直接用Xcode打开ios项目run,报如下error
error : '_JSNoBytecodeFileFormatVersion", referenced from'
- 解决办法:查看此条issue https://github.com/facebook/react-native/issues/14925
pod 'React', :path => '../node_modules/react-native', :subspecs => [
'Core',
'DevSupport', # Include this to enable In-App Devmenu if RN >= 0.43
'RCTText',
'RCTNetwork',
'RCTWebSocket', # needed for debugging
'BatchedBridge', # needed as of (0.46)
# Add any other subspecs you want to use in your project
]
# Explicitly include Yoga if you are using RN >= 0.42.0
pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga'
看到这个podfile文件和官方文档上的不同了吗,对了多加了一条'BatchedBridge'
就是因为没有引进这个文件才导致的报错,所以添加上这个文件重新pod install
就可以了。
二、查看RN创建的RCTRootView页面,报错“Application RNHighScores has not been registered”
并有下面的提示,小白做这个还是不太懂,明明是照着文档写的为什么错了呢,查看根目录下的index.js文件
AppRegistry.registerComponent('MyReactNativeApp', () => RNHighScores);
是注册RNHighScores
的问题吗?搜了一些网上的回答,说是需要AppRegistry.registerComponent('项目名称', () => RNHighScores);
这里填写的项目名称
需要和RCTRootView初始化时,填写的moduleName保持一致
RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
moduleName:@"项目名称"
initialProperties:nil
launchOptions:launchOptions];
尝试着修改了下,能顺利的跑起来了,所以如果碰到这个问题试着都换成组件名称试试。
第一次尝试RN,坑果然是很多,不过这是技术的趋势,以后编写代码将会越来越简单.