React Native 常见问题集合
在使用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的效果没有出现。 不过有另外解决方法:
<style name="ImageTranslucentTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
</style>
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 常见问题集合的更多相关文章
- 【RN - 基础】之React Native常见问题及解决方案
unable to load script from assets index.android.bundle... 问题原因: 找不到Android项目中的assets文件夹. 解决方案: 1.在An ...
- react native的环境搭建中常见问题
搭建完成android的环境,我们就可以继续我们的react native环境的搭建了. 当然,按照fb的安装流程来完成rn的搭建. http://facebook.github.io/react-n ...
- React Native之 Navigator与NavigatorIOS使用
前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会有所 ...
- React Native之ListView使用
前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会有所 ...
- react native 入门实践
上周末开始接触react native,版本为0.37,边学边看写了个demo,语法使用es6/7和jsx.准备分享一下这个过程.之前没有native开发和react的使用经验,不对之处烦请指出.希望 ...
- iOS、swift、React Native学习常用的社区、论坛
<!----iOS> <!----Swift>*IOS开发常用社区:http://code4app.com/ *IOS开发常用社区:http://www.cocoachina. ...
- 腾讯优测优分享 | 探索react native首屏渲染最佳实践
腾讯优测是专业的移动云测试平台,旗下的优分享不定时提供大量移动研发及测试相关的干货~ 此文主要与以下内容相关,希望对大家有帮助. react native给了我们使用javascript开发原生app ...
- React Native填坑之旅--ListView篇
列表显示数据,基本什么应用都是必须.今天就来从浅到深的看看React Native的ListView怎么使用.笔者写作的时候RN版本是0.34. 最简单的 //@flow import React f ...
- react native 布局注意点
一.react native中很多是ES6语法. 1行.表示是js的严格模式. 'use strict';严格模式中变量必须先声明,然后赋值.定义等:还有就是this的绑定. 2行到8行.导入依赖,可 ...
随机推荐
- Spring MVC异常处理详解
Spring MVC中异常处理的类体系结构 下图中,我画出了Spring MVC中,跟异常处理相关的主要类和接口. 在Spring MVC中,所有用于处理在请求映射和请求处理过程中抛出的异常的类,都要 ...
- 百度地图与HT for Web结合的GIS网络拓扑应用
在<HT for Web整合OpenLayers实现GIS地图应用>篇中介绍了HT for Web与OpenLayers的整合,不少朋友反应国内用得比较多的还是百度地图,虽然HT整合百度地 ...
- ASP.NET MVC系列:开始
创建Asp.Net MVC项目 从visual studio主界面开始菜单中点击“新建项目”
- 装饰者模式(Decorator pattern)
知识点 类应该对扩展开放,对修改封闭. 案例 (本故事纯属虚构) 某日早上,流年刚把新开发的游戏项目提交给经理 public abstract class Role { public virtual ...
- JQuery对ASP.NET MVC数据进行更新删除
以前学习ASP.NET MVC时,学习与应用,操作过数据显示,添加,编辑,更新和删除等功能. 很多方法是相通的,看自己是怎样来进行方便,快捷,高效率. 今天Insus.NET写的练习,是直接对绑定在T ...
- MySQL性能优化的20条经验
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数 ...
- 自己实现简单Web服务器,支持GET POST请求
最近项目上遇到一个需求,最后想到的解决方案是自己实现一个web服务器去处理请求,然后再将信息发送到另外一个程序.然后返回处理之后的结果呈现出来. 现在我就来分享一下如何实现的. 通过.NET 为我们提 ...
- 理清那么多个OO(面向对象)
OOA - Object-Oriented Analysis(面向对象分析) OOT - Object-Oriented Testing (面向对象测试) OOP - Object-Oriented ...
- 使用MiniProfiler跟踪MVC + EF + Bootstrap 2 权限管理系统的性能消耗
安装MiniProfiler 在MVC + EF + Bootstrap 2 权限管理系统入门级(附源码)文章中下载了它的源码,调试模式下打开一个页面都要再2.5秒以上,所以使用MiniProfile ...
- 应用服务器和Web服务器
如上图所示,绝大部分的公司会采用Apache+tomcat集群(或jetty集群)来部署公司的Web服务, Web服务器和应用服务器关系,先介绍一下我们常说的服务器: Tomcat服务器,是运行ser ...