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行.导入依赖,可 ...
随机推荐
- poj 2226 Muddy Fields(合理建图+二分匹配)
/* 题意:用木板盖住泥泞的地方,不能盖住草.木板任意长!可以重叠覆盖! '*'表示泥泞的地方,'.'表示草! 思路: 首先让我们回忆一下HDU 2119 Matrix这一道题,一个矩阵中只有0, 1 ...
- Linux下如何删除Oracle
一. 停止Oracle数据库服务 shutdown immediate 二. 停止监听服务 lsnrctl stop 三. 用dbca卸载数据库实例 四. 删除相关文件 -->> 如果只 ...
- Windows Azure Virtual Machine (27) 使用psping工具,测试Azure VM网络连通性
<Windows Azure Platform 系列文章目录> 微软Azure在设计架构的时候,从安全角度考虑,是禁用ICMP协议的.所以对于Azure VM,是无法使用ping命令的. ...
- Windows Azure Virtual Machine (33) Azure虚拟机删除重建
<Windows Azure Platform 系列文章目录> 注意:本文介绍的重建Azure虚拟机,必须在同一个订阅内删除重建,必须在同一个订阅内删除重建,必须在同一个订阅内删除重建. ...
- SQL Server中的事务日志管理(7/9):处理日志过度增长
当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...
- 【原创】Django-ORM基础
概述 1.什么是ORM? ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不 ...
- 【Swift学习】Swift编程之旅---ARC(二十)
Swift使用自动引用计数(ARC)来跟踪并管理应用使用的内存.大部分情况下,这意味着在Swift语言中,内存管理"仍然工作",不需要自己去考虑内存管理的事情.当实例不再被使用时, ...
- ROS 多台电脑间进行通信
版权声明:本文为博主原创文章,转载请标明出处: http://www.cnblogs.com/liu-fa/p/5773822.html 在我看来,ROS最牛逼的地方就是它的通信机制了,不仅仅是进程间 ...
- Vim快捷键分类
别用ESC了,用ctrl-[ 更快捷 一. 移动: h,j,k,l: 左,下,上,右. w: 下一个词的词首. e:下一个词的词尾. b:上一个词的词首. < ...
- a[href^=""]的解释
a[href^="绝对路径"]这个算一种属性选择器,在这里是用来选择链接属性为“绝对路径”的a标签,其中的^其实是"以什么为开始"(begin with)的意思 ...