React Native之坑总结(持续更新)
React Native之坑总结(持续更新)
Genymotion安装与启动
之前我用的是蓝叠(BlueStack
)模拟器,跑RN程序也遇到了一些问题,都通过搜索引擎解决了,不过没有记录。
但是BlueStack
有一些问题,比如没有菜单键,模拟器默认是横向的,商业化太严重(本来是用来玩游戏的),界面太丑,等等......
于是我按照RN中文网的推荐下载了Genymotion模拟器,这一下,就是万劫不复......
我是在官网下载的Genymotion,自带VirtualBox 5.0.4
版本。下载安装好后,我创建了一个virtual device
,一切看起来都很正常。然而,当我点击Start
后,却弹出错误提示,内容如下:
Unable to start the virtual device.
VirtualBox cannot start the virtual device.
To find out the cause of the problem, start the virtual device from VirtualBox.
我去百度以上信息,结果都是让我打开VirtualBox,设置balabala云云。悲剧的是,我的VirtualBox根本打不开。去搜索也没有什么有效信息。无奈我下了个4.3版本的VirtualBox重装了下,这次轮到Genymotion打不开了。提示如下:
Unable to load VirtualBox engine.
Make sure that it is properly installed before starting Genymotion.
这个问题也是找了各种办法都没有用。
最后,我去官网下载了最新版的VirtualBox 5.18,结果好了。
内心真是崩溃。。花了近两个小时终于搞定了。。
Genymotion模拟器启动后,adb devices中显示找不到设备
解决办法:在Genymotion中Settings->ADB中选中Use custom Android SDK tools,选择Android SDK路径即可。
启动应用显示could not get batchedBridge
完整信息如下:
Could not get BatchedBridge, make sure your bundle is packaged correctly.
解决方法:点击模拟器的选项键或点击摇晃按钮,会弹出一个菜单,选择Dev Settings
,在弹出的页面中点击Debug server host & port for device
,填入本机IP + ":8081",如:10.138.253.3:8081
。
获取本机IP的方法是在cmd中输入ipconfig
。
启动RN应用后,提示找不到packager
我自然是启动了packager的,而且应用的Debug server host & port for device
中也填了本机IP:10.138.253.3:8081。
然后出现这个问题就很奇怪了,后来我在网上找到了这篇帖子,里面提到了localhost与127.0.0.1,于是我去查了这两个东西。
发现127.0.0.1一定是本机IP,但是localhost有可能被解析成完全不同的IP地址,也就出现了上面找不到packager的情况。
于是我将应用的Debug地址改为了127.0.0.1:8081。果然成功了。
但是很奇怪的问题是为什么我使用BlueStack模拟器的时候填本机IP是没问题的,到了Genymotion就不行了。这个问题暂且搁置。。。
又一波血与泪的教训
其实大部分是自己写代码的时候没有注意小细节,RN的IDE又没有这么智能,所以出现了很多奇怪的错误。最后的错误报告可能和你写错的地方一点关系都没有,很蛋疼。。。
类名要大写
有一句
let Component = route.component;
中的第一个Component的首字母要大写。antd-mobile的tabs组件有个bug:如果一个子页面中有输入框,输入任意一个字符后,tabs会自动向左滑动(最左边的子页面没有这个问题)。于是我把滑动的tabs换成了react-native-scrollable-tab
如果不用ant design的form代码,就无法输入字符。下面是一个示例:
import React, { Component } from 'react';
import {
Text,
View
} from 'react-native';
import Button from 'antd-mobile/lib/button';
import WhiteSpace from 'antd-mobile/lib/white-space';
import List from 'antd-mobile/lib/list';
import InputItem from 'antd-mobile/lib/input-item';
import WingBlank from 'antd-mobile/lib/wing-blank';
import { createForm } from 'rc-form'; class Register extends Component {
render() {
const {getFieldProps} = this.props.form;
return (
<View style={{flex: 1}}>
<List>
<InputItem
{...getFieldProps('registerusername', {
initialValue: ''
})}
clear
placeholder="6-12位字母或数字"
>用户名</InputItem>
<InputItem
{...getFieldProps('registernickname', {
initialValue: ''
})}
clear
placeholder="6-14位字符,一个汉字为两个字符"
>昵称</InputItem>
<InputItem
{...getFieldProps('registerpassword', {
initialValue: ''
})}
type="password"
clear
placeholder="******"
>密码</InputItem>
</List>
<WhiteSpace size="lg"/>
<WingBlank>
<Button type="default" color="'#000000">注册</Button>
</WingBlank>
<WhiteSpace size="lg"/>
</View>
);
}
} Register = createForm()(Register);
module.exports = Register;
不过这里的InputItem输入之后如何提交还需要研究。。
持续更新中……
Component类的一些方法
- 在组件的生命周期中,
getInitialState()
只执行一次,它负责对组件的state进行初始化。 - 这里的
componentDidMount
是一个在React组件渲染以后将被React调用的方法。
一个坑
const { dispatch, room } = props;
这里的props更新之后,就不能再用room来访问更新的内容了,因为room是之前就确定的一个常量。
React Native之坑总结(持续更新)的更多相关文章
- React Native汇错归纳(持续更新中……)
1.2017-10-25: 报错信息:“Cannot find entry file index.android.js in any of roots…..” 解决方法: 1.首先从虚拟机中找问题:看 ...
- React Native之code-push的热更新(ios android)
React Native之code-push的热更新(ios android) React Native支持大家用React Native技术开发APP,并打包生成一个APP.在动态更新方面React ...
- React Native 填坑一
React Native 填坑一 关于RN的布局 分为主轴和交叉轴, 主轴可以是横向也可以是竖向,交叉轴也是对应的. 主轴默认是竖向.如果要更改用flexdirection 主轴对齐方式:justif ...
- React Native填坑之旅--组件生命周期
这次我们来填React Native生命周期的坑.这一点非常重要,需要有一个清晰的认识.如果你了解Android或者iOS的话,你会非常熟悉我们今天要说的的内容. 基本上一个React Native的 ...
- React Native填坑之旅--重新认识RN
如同黑夜里的一道光一样,就这么知道了F8. F8是每年一次Facebook每年一次的开发者大会.每次大会都会release相应的APP,iOS.Android都有.之前都是用Native开发的,但是2 ...
- React Native填坑之旅--Navigation篇
React Native的导航有两种,一种是iOS和Android通用的叫做Navigator,一种是支持iOS的叫做NavigatorIOS.我们这里只讨论通用的Navigator.会了Naviga ...
- React Native踩坑日记 —— tailwind-rn
项目背景 在项目的初始阶段,我们需要建立自己的design system,我们spike了一些方案,tailwind-rn就是其中一种,如果有用到或者即将用到tailwind-rn的,可以进来看一看, ...
- React Native踩坑Tip
最近在使用React Native(以下简称RN)中踩了个坑,RN只能异步调用原生方法,所以在原生方法直接调用UI刷新操作需要将任务递交到主线程才可以. RCT_EXPORT_METHOD(finis ...
- React Native填坑之旅--与Native通信之iOS篇
终于开始新一篇的填坑之旅了.RN厉害的一个地方就是RN可以和Native组件通信.这个Native组件包括native的库和自定义视图,我们今天主要设计的内容是native库方面的只是.自定义视图的使 ...
随机推荐
- 更有效率的使用Visual Studio(二)
没想到上一篇文章有这么多人喜欢,多谢大家支持.继续- 很多比较通用的快捷键的默认设置其实是有一些缩写在里面的,这个估计也是MS帮助我们记忆.比如说注释代码的快捷键是Ctrl + E + C,我们如果知 ...
- CSharpGL(19)用glReadPixels把渲染的内容保存为PNG图片(C#)
CSharpGL(19)用glReadPixels把渲染的内容保存为PNG图片(C#) 效果图 本文解决了将OpenGL渲染出来的内容保存到PNG图片的方法. 下载 CSharpGL已在GitHub开 ...
- stm32GPIO的速度是什么意思
[引]: I/O口输出模式下,有3种输出速度可选(2MHz.10MHz和50MHz),这个速度是指I/O口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在I/O口的输出部分 ...
- 在PC上测试移动端网站和模拟手机浏览器的5大方
查了很多资料,尝试了大部分方法,下面将这一天的努力总结下分享给大家,也让大家免去看那么多文章,以下介绍的方法,都是本人亲自测试成功的方法,测试环境winxp. 一.Chrome*浏览器 chrome模 ...
- Web中的XHRHttpRequest
1.提出者:Jesse James Garrett 2.IE中,XHR是通过ActiveX对象实现的.涉及浏览器的兼容性写法. 3.使用 <1>open("请求方式&qu ...
- GC使用注意
GC.Collect() GC.WaitForPendingFinallizers() GC.KeepAlive 尽量不要new很大的Object 不要频繁的new生命周期很短的Object,这样会导 ...
- Vue1.0 的技术栈
vuejs概述 Vue.js是用于构建交互式的Web界面的库.它提供了MVVM数据绑定和一个可组合的组件系统,具有简单.灵活的API. 结合node.js 可以实现前后端开发从物理上的分离.使前端负责 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(45)-工作流设计-设计步骤
系列目录 步骤设计很重要,特别是规则的选择. 我这里分为几个规则 1.按自行选择(在起草时候自行选审批人,比较灵活) 2.按上级(无需指定,当时需要知道用户的上司是谁,可以在职位管理设置,或者在用户表 ...
- 1. 使用Filter 作为控制器
最近整理一下学习笔记,并且准备放到自己的博客上.也顺便把Struts2 复习一遍 1. MVC 设计模式概览 实现 MVC(Model.View.Controller) 模式的应用程序由 3 大部分构 ...
- Linux平台oracle 11g单实例 安装部署配置 快速参考
1.重建主机的Oracle用户 组 统一规范 uid gid 以保证共享存储挂接或其他需求的权限规范 userdel -r oracle groupadd -g 7 oinstall groupadd ...