在使用React Native时候,我记录下比较常遇到的问题,分为以下几类:

1. 调试问题

2. 写法问题

3. 疑难问题

4. 奇怪问题

调试问题

1. 在react-native run-android运行后,真机上打开的空白页面。

我测试机是红米2A(Android 4.4.4),在调试时,发现没有reload的菜单栏,也没有日志出现。

原因:需要到应用->权限管理->显示悬浮窗打开,这样才可以查看错误日志。

2. 打成的apk安装包安装后, 替换的图片(应用icon)没有变,还是旧图片?

原因:这应该是你机器本来就安装过测试包了,有了缓存,重启下机器就可以了。

3. 怎么进行js调试?

解答:可以在代码里面写一个debugger,然后在手机上点击"start remote js debugging",这是会自动打开一个Chrome页面,打开开发者控制台。当代码经过debugger时候,即可调试。

写法问题

1. Application simpleAPP has not been registered. This is either due to a require() error during initialization or failure to call AppRegistry.registerComponent.

原因: AppRegistry.registerComponent('testProject', () => RnListView);   这一句,要看testProject这个参数有没有写对,是不是跟应用名一样(你初始化的应用名)。

2. Adjacent JSX elements must be wrapped in an enclosing tag.

例如:

  render: function() {
return (
<h1>something</h1>
<div>
something else
</div>
);
}
});

原因:React element can return only one element. 官方有Q&A说明,只能返回一个element,上面返回了两个element。

3.  图片加载不了?

例1:

var localImg = "./images/demo/newsImg2.png";
require( localImg );

例2:

require( "./images/demo/newsImg2.png");

第一种情况加载不了。

原因:为了使新的图片资源机制正常工作,require中的图片名字必须是一个静态字符串,这是React规定。

4. 为什么要这样写onPress={ () => this.goback() } ,而不是onPress={  this.goback } ?

原因:我认为是为了保持goback函数里this的指向。

疑难问题

1. Android状态栏的“沉浸式”设置无效?

例如:

<StatusBar
backgroundColor='blue'
translucent = {true}
/>

经过我的尝试,hidden属性是有效,但translucent的效果没有出现。  不过有另外解决方法:

在styles.xml加上:
     <style name="ImageTranslucentTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
</style>
在manifest的activity加上:
android:theme="@style/ImageTranslucentTheme"
然后在每个页面的Header都要相应加多高度来适应:
paddingTop: 20,
height: 68,

2. react-native-gifted-listview 用这个组件时候,报了两个warning!

(1). In next release empty section headers will be rendered. In this release you can user 'enableEmptySections' flag to render empty section headers.

解决:找到node_modules下的react-native-gifted-listview,在ListView下 加个 enableEmptySections = {true} 就可以解决了。

(2). Circular indeterminate 'ProgressBarAndroid' is deprecated. Use 'ActivityIndicator' instead.

解决:找到node_modules下的react-native-gifted-spinner,修改组件。

PS:这个组件开发者没有及时更新。

3. TouchableHighlight的onPress事件无效,总报“undefined is not a function”?

例如:

  _pressRow(title){
Alert.alert( 'Alert Title', "fuck",[{ text: 'OK', onPress: () => console.log('OK Pressed!')}])
}
_renderRowView(rowData) {
return (
<TouchableHighlight
underlayColor='#c8c7cc'
onPress={ () => this._pressRow(rowData.title)}>
</TouchableHighlight>
);
}
render() {
return (
<ScrollView>
<ListView
dataSource={this.state.dataSource}
renderRow={ this._renderRowView}/>
</ScrollView>
);
}

原因:renderRow={ this._renderRowView},里面渲染的列里面的this不再是最外层的this,需要改成this._renderRowView.bind(this)。

4. 尺寸怎么计算,设计图到具体数值?

解决:这个可以查看https://segmentfault.com/a/1190000002658374 这篇文章,挺详细的。

5. 组件之间的传值怎么做?

解决:这个可以查看http://blog.csdn.net/gz_jero/article/details/51531247

6. 怎么图片显示不完整?

代码如下(只显示部分):

// Card视图
var Card = React.createClass({
showToast: function(num: i) {
ToastAndroid.show(NAMES[num].toString(), ToastAndroid.SHORT);
}, // 左右留空, 中间匹配
render: function() {
return (
<TouchableOpacity
style={styles.button}
onPress={() => this.showToast(this.props.num)}
>
<Image
style={styles.image}
resizeMode={'cover'}
source={this.props.img}/>
</TouchableOpacity>
);
}
}); // 批量创建
var createCardRow = (img, i) => <Card key={i} img={img} num={i}/>; var ListViewModule = React.createClass({
render: function() {
var verticalScrollView = (
<ScrollView
style={styles.container}>
{IMAGES.map(createCardRow)}
</ScrollView>
);
return verticalScrollView;
}
}); var styles = StyleSheet.create({ container: {
flex: 1,
}, button: {
justifyContent: 'space-between',
alignItems: 'center',
flexDirection: 'row',
margin: 10,
}, image: {
flex: 1,
height: 200,
borderRadius: 5,
borderWidth: 2,
borderColor: '#FF1492',
}, blank: {
width: 10,
}
});

原因:当图片没有设置width具体数值,弹性布局并不会将图片自适应到整个容器宽度,而是按着图片本身大小显示。

简单说就是图片不能用flex设置宽度。(这个原因是我的猜想)

我在Web做了测试:

 <div style="width:200px;flex:'flexDirection';">
<img src="F:\workspace_react\testProject\list_view_module\images\jessicajung.png" style="flex:1"/>
<div style="flex:1">234</div>
</div>

实验结果是,上面图片宽度还是732px,而下面的div是200px。

奇怪问题

1. 页面变得可以左右拖动,可以看到一片空白。

原因:当Navigator组件设置的转场动画是Navigator.SceneConfigs.HorizontalSwipeJump,那就会导致一个神奇的效果,页面可以左右拖动,看到一片空白区域(这个效果我觉得慎用)。

2. Github上有时有些库按命令装不了。

在安装库时候,发现了奇怪的现象。有时安装时,安装会报错。

解决:尝试加上--save或者删除--save就可以了!

3. 为什么要从react-native、react两个不同地方important组件? 

例如:

import React, { Component } from 'react';
import {
AppRegistry,
StyleSheet,
Text,
View
} from 'react-native';

react-native应该是包含原生组件部分,而React应该是与平台无关的基础组件。

本文为原创文章,转载请保留原出处,方便溯源,如有错误地方,谢谢指正。

React Native 常见问题集合的更多相关文章

  1. 【RN - 基础】之React Native常见问题及解决方案

    unable to load script from assets index.android.bundle... 问题原因: 找不到Android项目中的assets文件夹. 解决方案: 1.在An ...

  2. react native的环境搭建中常见问题

    搭建完成android的环境,我们就可以继续我们的react native环境的搭建了. 当然,按照fb的安装流程来完成rn的搭建. http://facebook.github.io/react-n ...

  3. React Native之 Navigator与NavigatorIOS使用

    前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会有所 ...

  4. React Native之ListView使用

    前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会有所 ...

  5. react native 入门实践

    上周末开始接触react native,版本为0.37,边学边看写了个demo,语法使用es6/7和jsx.准备分享一下这个过程.之前没有native开发和react的使用经验,不对之处烦请指出.希望 ...

  6. iOS、swift、React Native学习常用的社区、论坛

    <!----iOS> <!----Swift>*IOS开发常用社区:http://code4app.com/ *IOS开发常用社区:http://www.cocoachina. ...

  7. 腾讯优测优分享 | 探索react native首屏渲染最佳实践

    腾讯优测是专业的移动云测试平台,旗下的优分享不定时提供大量移动研发及测试相关的干货~ 此文主要与以下内容相关,希望对大家有帮助. react native给了我们使用javascript开发原生app ...

  8. React Native填坑之旅--ListView篇

    列表显示数据,基本什么应用都是必须.今天就来从浅到深的看看React Native的ListView怎么使用.笔者写作的时候RN版本是0.34. 最简单的 //@flow import React f ...

  9. react native 布局注意点

    一.react native中很多是ES6语法. 1行.表示是js的严格模式. 'use strict';严格模式中变量必须先声明,然后赋值.定义等:还有就是this的绑定. 2行到8行.导入依赖,可 ...

随机推荐

  1. javase基础复习攻略《三》

    编程语言的发展: 机器语言——直接由计算机的指令组成,指令.地址.数据都是以"0"和"1"的符号串组成,可以被计算机直接执行. 汇编语言——用容易理解和记忆的符 ...

  2. 基于Metronic的Bootstrap开发框架经验总结(1)-框架总览及菜单模块的处理

    最近一直很多事情,博客停下来好久没写了,整理下思路,把最近研究的基于Metronic的Bootstrap开发框架进行经验的总结出来和大家分享下,同时也记录自己对Bootstrap开发的学习研究的点点滴 ...

  3. GitHub入门教程 Hello World for GitHub

          Intro                              1.简介 What is GitHub?           2.什么是github? Create a Reposi ...

  4. Java Web项目的发布

    自己写的项目,我们想部署到其他电脑上,供别人访问. 首先安装jdk,和Tomcat.这里我的Tomcat是免安装版的,根据http://www.cnblogs.com/Joanna-Yan/p/487 ...

  5. js每天进步一点点3

    JS之样式的改变

  6. js中页面刷新和页面跳转的方法总结

    .js中cookie的基本用法简介 2009-12-15 js中页面刷新和页面跳转的方法总结 文章分类:Web前端 关键字: javascript js中页面刷新和页面跳转的方法总结 1.histor ...

  7. Azure上七层负载均衡APP Gateway

    Azure的SLB和ILB是最常用的4层负载均衡工具.但有些场景是7层的负载均衡,SLB和ILB就无能为力了. Azure上已经推出了APP Gateway的服务,就是7层负载均衡的负载均衡器. 如上 ...

  8. ios基础之 view的frame 与 bounds 的区别 (转)

    前言: 学习ios开发有一段时间了,项目也做了两个了,今天看视频,突然发现view的frame和bound两个属性,发现bound怎么也想不明白,好像饶你了死胡同里,经过一番尝试和思考,终于弄明白bo ...

  9. [AngularJS] AngularJS系列(4) 中级篇之指令

    目录 API概览 使用Angular.UI.Bootstrap 自定义指令 scope link 我的指令 angular中的指令可谓是最复杂的一块 但是我们的上传组件就能这么写 效果图: API概览 ...

  10. 如何将CKeditor编辑器的上传和thinkphp结合

    转载:THINKPHP代码中 lxepoo的文章 有时候我们会发现,我们需要对上传文件进行日志记录,这样的记录通常写在LOG文件或数据库中,那么,通过TP本身的上传类,可以实现的,但是只能做到编辑器外 ...