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之坑总结(持续更新)的更多相关文章

  1. React Native汇错归纳(持续更新中……)

    1.2017-10-25: 报错信息:“Cannot find entry file index.android.js in any of roots…..” 解决方法: 1.首先从虚拟机中找问题:看 ...

  2. React Native之code-push的热更新(ios android)

    React Native之code-push的热更新(ios android) React Native支持大家用React Native技术开发APP,并打包生成一个APP.在动态更新方面React ...

  3. React Native 填坑一

    React Native 填坑一 关于RN的布局 分为主轴和交叉轴, 主轴可以是横向也可以是竖向,交叉轴也是对应的. 主轴默认是竖向.如果要更改用flexdirection 主轴对齐方式:justif ...

  4. React Native填坑之旅--组件生命周期

    这次我们来填React Native生命周期的坑.这一点非常重要,需要有一个清晰的认识.如果你了解Android或者iOS的话,你会非常熟悉我们今天要说的的内容. 基本上一个React Native的 ...

  5. React Native填坑之旅--重新认识RN

    如同黑夜里的一道光一样,就这么知道了F8. F8是每年一次Facebook每年一次的开发者大会.每次大会都会release相应的APP,iOS.Android都有.之前都是用Native开发的,但是2 ...

  6. React Native填坑之旅--Navigation篇

    React Native的导航有两种,一种是iOS和Android通用的叫做Navigator,一种是支持iOS的叫做NavigatorIOS.我们这里只讨论通用的Navigator.会了Naviga ...

  7. React Native踩坑日记 —— tailwind-rn

    项目背景 在项目的初始阶段,我们需要建立自己的design system,我们spike了一些方案,tailwind-rn就是其中一种,如果有用到或者即将用到tailwind-rn的,可以进来看一看, ...

  8. React Native踩坑Tip

    最近在使用React Native(以下简称RN)中踩了个坑,RN只能异步调用原生方法,所以在原生方法直接调用UI刷新操作需要将任务递交到主线程才可以. RCT_EXPORT_METHOD(finis ...

  9. React Native填坑之旅--与Native通信之iOS篇

    终于开始新一篇的填坑之旅了.RN厉害的一个地方就是RN可以和Native组件通信.这个Native组件包括native的库和自定义视图,我们今天主要设计的内容是native库方面的只是.自定义视图的使 ...

随机推荐

  1. Lesson 21 Mad or not?

    Text Aeroplanes are slowly driving me mad. I live near an airport and passing planes can be heard ni ...

  2. 如何利用 Visual Studio 自带工具提高开发效率

    Visual Stuido 是一款强大的Windows 平台集成开发工具,你是否好好地利用了它呢? 显示行号 有些时候(比如错误定位)的时候,显示行号将有利于我们进行快速定位. 如何显示 1. 工具 ...

  3. Java继承

    Java只支持单继承,不支持多继承. 一个类只能有一个父类,不可以有多个父类. class SubDemo extends Demo{} //ok class SubDemo extends Demo ...

  4. JVM系列-常用参数

    1.堆内存 堆内存用于存储new对象,垃圾回收器负责堆内存的管理.但Java程序实际占用的空间则由堆内存.栈内存(程序运行栈).程序计数器.常量区.代码区.本地内存等. 堆内存分为Young和Old, ...

  5. vuex复习方案

    这次复习vuex,发现官方vuex2.0的文档写得太简略了,有些看不懂了.然后看了看1.0的文档,感觉很不错.那以后需要复习的话,还是先看1.0的文档吧.

  6. xp搭建IIS出现HTTP 500错误-2147467259 (0x80004005)

    安装IIS后访问localhost页面, 提示The remote procedure call failed and did not execute,再刷新变为:-2147467259 (0x800 ...

  7. 学习WCF入门的第一个实例

    一.概述 WCF说白了就是一个基于终结点的通信手段!就是Service端提供一定的功能实现,然后暴露出一个或多个终结点,Client端调用Service端的功能(可以理解为调用一个函数),那么Clie ...

  8. 常用的Webpack配置

    官方文档: http://webpack.github.io/docs/ 1. 安装python2. 安装node.js msi3. npm自动打包在最新的node.js安装包里 被封的包用国内镜像下 ...

  9. Python模拟登陆新浪微博

    上篇介绍了新浪微博的登陆过程,这节使用Python编写一个模拟登陆的程序.讲解与程序如下: 1.主函数(WeiboMain.py): import urllib2 import cookielib i ...

  10. JavaScript : 零基础打造自己的类库

    写作不易,转载请注明出处,谢谢. 文章类别:Javascript基础(面向初学者) 前言 在之前的章节中,我们已经不依赖jQuery,单纯地用JavaScript封装了很多方法,这个时候,你一定会想, ...