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行.导入依赖,可 ...
随机推荐
- Strophe.js连接XMPP服务器Openfire、Tigase实现Web私聊、群聊(MUC)
XMPP(Extensible Messaging and Presence Protocol)是一种网络即时通讯协议,它基于XML,具有很强的扩展性,被广泛使用在即时通讯软件.网络游戏聊天.Web聊 ...
- MAC下安装与配置MySQL
MAC下安装与配置MySQL MAC下安装与配置MySQL 一 下载MySQL 访问MySQL的官网http://www.mysql.com/downloads/ 然后在页面中会看到“MySQL ...
- Android如何避免切换至SurfaceView时闪屏(黑屏闪一下)以及黑屏移动问题
1.最近的项目中,有一个Activity用到Fragment+ViewPager,其中一个fragment中实现了视频播放的功能,包含有SurfaceView.结果,每次打开程序第一次进入到该Acti ...
- Android基于mAppWidget实现手绘地图(七)–根据坐标添加地图对象
为了将地图对象放置到某个特殊的地理位置上,你需要: 1. 创建地图对象 2.添加地图对象到图层(任何位置) 3. 移动该地图对象,使用 MapObject.moveTo(Location locati ...
- iOS_UIImage_图片剪切
- (UIImage *)imagecutWithRect:(CGRect)rect { CGImageRef subImageRef = CGImageCreateWithImageInRect(s ...
- Jackson序列化和反序列化Json数据完整示例
Jackson序列化和反序列化Json数据 Web技术发展的今天,Json和XML已经成为了web数据的事实标准,然而这种格式化的数据手工解析又非常麻烦,软件工程界永远不缺少工具,每当有需求的时候就会 ...
- 微软公有云Windows Azure 2014-03-26 国内正式商用
新浪科技讯 3月27日早间消息,微软国昨天下午宣布由世纪互联负责运营的Microsoft Azure公有云服务正式商用.这是国内首个正式商用的国际公有云服务平台.而开正式开放商用,意味着任何企业现在都 ...
- ECharts+百度地图网络拓扑应用
前一篇谈及到了ECharts整合HT for Web的网络拓扑图应用,后来在ECharts的Demo中看到了有关空气质量的相关报表应用,就想将百度地图.ECharts和HT for Web三者结合起来 ...
- 说说我在项目中为什么不用实体框架,如果说我在诋毁你所爱的EF,请进来.
1.坑多. 这一点没有人会否定.当然你可以说你很牛,但事实不会因为你牛就可以说不存在.从博客园中的博问中大家关于EF的提问量就问题的怪异程度就可以看出来. 1.Entity Framework 查询历 ...
- Visual Studio 2012 Update 4 RC 启动调试失败解决方案
以下解决办法适用于任何Visual Studio开发环境,及Windows NT 6.1以上系统. 系统:Windows 8.1 Enterprise x64 RTM 开发环境:Visual Stud ...