React Native 问题

() React Native 环境相关问题

安装 Homebrew 失败,可以使用中科大镜像来安装
执行 /usr/bin/ruby -e “$(curl -fsSL https://cdn.jsdelivr.net/gh/ineo6/homebrew-install/install)”

解决方案参考:https://www.jianshu.com/p/e3a177413265

切换 cocoapods 为清华大学镜像

解决方案参考:https://mirror.tuna.tsinghua.edu.cn/help/CocoaPods

() 编译与运行问题

React Native Could not expand ZIP

其余错误也可以采用下面的解决方案

解决方案:清理一下

cd android 
gradlew clean 
cd ..
react-native run-android 

或者

cd android && gradlew clean && cd .. && react-native run-android

() IOS指定模拟器运行

react-native run-ios --simulator "iPhone X"

() React-Native执行react-native run-ios 无法自启动模拟器

// 列出所有的iPhone Simulator,每个设备都有唯一的id
xcrun simctl list devices

// 设置默认Simulator
xcrun simctl boot 610E0E19-F6A6-40E2-A16B-38A35F7F8B18

// 打开Simulator
open `xcode-select -p`/Applications/Simulator.app

// 测试是否自动打开Simulator
react-native run-ios

() WebStorm设置React Native智能提示

ReactNative-LiveTemplate插件地址:https://github.com/virtoolswebplayer/ReactNative-LiveTemplate

Mac下安装
提示: 如果没有templets文件夹,你可以手动创建一个

将ReactNative-LiveTemplate目录下的ReactNative.xml复制到~/Library/Preferences/WebStorm***/templates,然后重启WebStrom

例如:~/Library/Preferences/WebStorm2018.3/templates

使用方法

通用方法
直接输入组件或Api名称的首字母, 比如想要View,只要输入V自动提示代码里就会看到View

StyleSheet属性提示
首先 按下command + J, 然后输入属性名的首字母

如: 输入f,会自动提示 fontSize,fontFamily,fontStyle…等等

() react-native-scrollable-tab-view和ScrollView冲突

IOS是正常的,但是在Android上react-native-scrollable-tab-view需要设置高度,不然无法正常显示

() render()中调用this.setState()会导致死循环

() Android的Text只能嵌套Text,不能嵌套任何View,不然会报错,但是IOS可以嵌套任何View

() React Native嵌入WebView来展示网页内容。在网页中,有 input 标签的输入框,通过点击输入框,弹出系统软键盘进行输入。但是无论是Android 虚拟机还是实体机上,都无法第一时间弹出软键盘。

通过操作应用,反而发现将应用前后台进行切换一下,再切入前台展示WebView,此时的软键盘就能够正常弹出。

解决方案参考:http://www.voidcn.com/article/p-zprjndmf-bqd.html

() React Native嵌入WebView 组件不支持Android上传图片文件问题

问题原因:
原因是 H5 访问本地文件的时候,使用的 < input type=‘file’>,WebView 出于安全性的考虑,限制了以上操作。

解决方法:
重写 WebviewChromeClient 中的 openFileChooser() 和 onShowFileChooser()方法响应< input type=‘file’>,然后使用原生代码来实现调用本地相册和拍照的功能,最后在 onActiivtyResult 把选择的图片 URI 回传给 WebviewChromeClient。

解决方案参考:https://www.lenore412.com/2018/08/10/ReactNativeWebview

() React Native Module数据多次回调不管是使用Promises和Callback都会报错,

错误信息:
Illegal callback invocation from native module. This callback type only permits a single invocation from native code.

原因:因为React Native为了节省内存,当调用Promises或者Callback一次之后,React Native就立即释放掉了,所以他仅仅只能调用一次。 但是我们有其他需求的时候,比如蓝牙扫描,做过蓝牙方面应用的应该都知道,当用户扫描设备时,并不是一次性的将周围蓝牙设备返回,因此这个时候我们就需要多次回调数据。

解决方案:Native Module出现多次数据回调时,我们可以使用RCTEventEmitter来注册事件,然后通知到JavaScript。

解决方案参考:https://www.jianshu.com/p/4245b4844a49

() Fetch库有时不会发出网络请求

As far as the underlying bug, definitely feels like the eventloop "falls asleep" when processing response.blob and readBlobAsText, instead of recognizing there are still a Promise on the eventloop to process and return data back to the callers.

解决方案:用 Axios (http://www.axios-js.com) 替代 Fetch 做网络请求。

() Mac OS拷贝到IOS模拟器

1.将要Mac上的内容拷贝到Mac粘贴板上(可以使用Commond + C,或者鼠标右键,点击复制)

2.将窗口切换到iOS模拟器,然后使用Mac上键盘点击:commond + V(这一步操作是将Mac剪贴板上的内容拷贝到iOS模拟器的剪贴板上),然后在iOS模拟器上使用菜单选项(在输入框中,长按就会出来一个黑色的菜单条,如下图所示)中的粘贴(Paste)进行粘贴

()IOS模拟器拷贝到Mac OS

1.在iOS模拟器中,使用菜单选项拷贝内容(不能使用Commond + C),然后使用Mac上键盘点击:Commond + C(这一步操作是将iOS模拟器剪贴板上的内容拷贝到Mac OS的剪贴板上)

2.将窗口切换到非iOS模拟器窗口,就可以直接按照正常的粘贴方式(Commond + V,或者鼠标右键,点击粘贴),将iOS模拟器上拷贝的内容粘贴到Mac OS上了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值