在使用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. Android开发之广播

    广播是Android开发中的一个重要的功能,在Android里面有各式各样的广播,比如:电池的状态变化.信号的强弱状态.电话的接听和短信的接收等等,现在给大家简单介绍一下系统发送.监听这些广播的机制. ...

  2. kubernetes

    项目主页:http://kubernetes.io/ docker仅能在单机上部署容器,而kubernetes可以统一管理各类容器,形成集群.Kubernetes作为Docker生态圈中重要一员,是G ...

  3. Asp.Net回车键触发Button的OnClick事件解决方案

    在aspx页面有textbox文本框,还有三个button按钮.启用textbox的TextChanged事件和button的click事件. 问题: 现在在textbox文本框输入完数据按“回车”后 ...

  4. SQL Server 索引的创建原则

    避免对经常更新的表进行过多的索引,并且索引中的列尽可能少.而对经常用于查询的字段(外键)应该创建索引,但要避免添加不必要的字段. 数据量小的表最好不要使用索引,由于数据较少,查询花费的时间可能比遍历索 ...

  5. Elasticsearch 之 数据索引

    对于提供全文检索的工具来说,索引时一个关键的过程——只有通过索引操作,才能对数据进行分析存储.创建倒排索引,从而让使用者查询到相关的信息. 本篇就ES的数据索引操作相关的内容展开: 更多内容参考:El ...

  6. Java - 容器详解

    一.ArrayList 长度可变数组,类似于c++ STL中的vector. 元素以线性方式连续存储,内部允许存放重复元素. 允许对元素进行随机的快速访问,但是向ArrayList中插入和删除元素的速 ...

  7. ECLIPSE ANDROID PROJECT IMPORT SUMMARY

    ECLIPSE ANDROID PROJECT IMPORT SUMMARY======================================Manifest Merging:------- ...

  8. C语言学习014:结构化数据类型

    struct的基本使用 #include <stdio.h> //定义数据结构 struct fish{ const char *name; const char *species; in ...

  9. char导致的验证异常

    表的一个字段: Moblie  char(15) 对应的mvc代码: @Html.EditorFor(c => c.Mobile) [RegularExpression("^1[3|4 ...

  10. ASP.NET MVC图片管理(更新)

    Insus.NET在ASP.NET MVC专案中,实现了图片管理,上传,预览,显示,删除等功能,还差一个功能,就是更新图片的功能,那这次来完成它.你可以先参考前2篇<ASP.NET MVC图片管 ...