情景描述:

从一个名为“My”的组件点击进去,进入一个列表(该列表内容为webView中内容),其中一个webView也可以点击进入详情页(也为webView),但是如果对导航栏不做任何处理,直接点击返回按钮,便会直接从详情页跳转至最顶层页面,而返回不到该列表内容页;很显然这并非我们想要的效果,于是就需要在原有导航返回事件中增加对webView返回事件的处理,完整代码如下(由于拍的视频格式有问题,就看不了效果图了~~~桑心,只能凑合看看代码了):

export class CommonProblem extends Component {//自定义一个组件
static navigationOptions = ({ navigation }) => {
return {
headerTitle: '常见问题', //导航标题
headerTitleStyle: {
alignSelf: 'center',
textAlign: 'center',
fontSize: 16,
color: '#FFF'
},
headerLeft: (
<TouchableHighlight
activeOpacity={1}
underlayColor={skin.main}
onPress={() => {
navigation.state.params.goBackPage();
}}
>
<View style={{ paddingLeft: 20 }}>
<Icon name="ios-arrow-round-back-outline" size={30} style={{ color: '#FFF' }} />
</View>
</TouchableHighlight>
),
//导航左与导航右是为了让导航标题居中(Why?)
headerRight: <View style={{ paddingRight: 20 }} />
};
}; constructor(props) {
super(props);
this.nav = this.props.navigation;//导航
// 添加返回键监听(对Android原生返回键的处理)
this.addBackAndroidListener(this.nav);
}
componentDidMount() {
this.props.navigation.setParams({//给导航中增加监听事件
goBackPage: this._goBackPage
});
} //自定义返回事件
_goBackPage = () => {
// 官网中描述:backButtonEnabled: false,表示webView中没有返回事件,为true则表示该webView有回退事件
if (this.state.backButtonEnabled) {
this.refs['webView'].goBack();
} else {//否则返回到上一个页面
this.nav.goBack();
}
};
//获取链接
getSource() {//config.HelpProblemUrlTest是webView的地址(一个独立的H5页面)
if (!config.Release) {
return config.HelpProblemUrlTest;
}
return config.HelpProblemUrl;
} onNavigationStateChange = navState => {
this.setState({
backButtonEnabled: navState.canGoBack
});
}; // 监听原生返回键事件
addBackAndroidListener(navigator) {
if (Platform.OS === 'android') {
BackHandler.addEventListener('hardwareBackPress', this.onBackAndroid);
}
} onBackAndroid = () => {
if (this.state.backButtonEnabled) {
this.refs['webView'].goBack();
return true;
} else {
return false;
}
};
render() {
let Dimensions = require('Dimensions');
let { width, height } = Dimensions.get('window');
return (
<View style={{ backgroundColor: skin.lightSeparate, flex: 1 }}>
<WebView
source={{ uri: this.getSource() }}
style={{ flex: 10, justifyContent: 'center', alignItems: 'center', width: width }}
ref="webView"
onNavigationStateChange={this.onNavigationStateChange}
/>
</View>
);
}
}

这样就完美的达到了自己想要的问题咯。

React Native(十二)——嵌套WebView中的返回处理的更多相关文章

  1. perl5 第十二章 Perl5中的引用/指针

    第十二章 Perl5中的引用/指针 by flamephoenix 一.引用简介二.使用引用三.使用反斜线(\)操作符四.引用和数组五.多维数组六.子程序的引用  子程序模板七.数组与子程序八.文件句 ...

  2. 利用WPF建立自己的3d gis软件(非axhost方式)(十二)SDK中的导航系统

    原文:利用WPF建立自己的3d gis软件(非axhost方式)(十二)SDK中的导航系统 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPew ...

  3. vue第十二单元(vue中过渡效果的实现)

    第十二单元(vue中过渡效果的实现) #课程目标 熟练掌握transition组件的用法 熟练使用transition组件做过渡特效 熟练使用transition组件做动画特效 了解使用transit ...

  4. “全栈2019”Java第五十八章:多态中方法返回类型可以是子类类型

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  5. React Native(十五)——RN中的分享功能

    终于,终于,可以总结自己使用RN时的分享功能了-- 为什么呢?且听我慢慢道来吧: 从刚开始接触React Native(2017年9月中旬)就着手于分享功能,直到自己参与公司的rn项目开发中,再到现在 ...

  6. React Native - 网页组件(WebView)的使用详解

    一.WebView组件介绍 使用 WebView 组件我们可以通过 url 来加载显示一个网页,也可以传入一段 html 代码来显示.下面对其主要属性和方法进行介绍.   1,属性介绍 source: ...

  7. React Native学习(二)之View

    React Native组件解析(二)之View 0.JSX React的核心机制之一就是虚拟DOM:可以在内存中创建的虚拟DOM元素.React利用虚拟DOM来减少对实际DOM的操作从而提升性能. ...

  8. react第十二单元(react路由-使用react-router-dom-认识相关的组件以及组件属性)

    第十二单元(react路由-使用react-router-dom-认识相关的组件以及组件属性) #课程目标 理解路由的原理及应运 理解react-router-dom以及内置的一些组件 合理应用内置组 ...

  9. React Native 系列(二) -- React入门知识

    前言 本系列是基于React Native版本号0.44.3写的,最初学习React Native的时候,完全没有接触过React和JS,本文的目的是为了给那些JS和React小白提供一个快速入门,让 ...

随机推荐

  1. 【转】【MySQL】Mysql模糊查询like提速优化

    在使用msyql进行模糊查询的时候,很自然的会用到like语句,通常情况下,在数据量小的时候,不容易看出查询的效率,但在数据量达到百万级,千万级的时候,查询的效率就很容易显现出来.这个时候查询的效率就 ...

  2. php 文件上传类,功能相当齐全,留作开发中备用吧。

    收藏一个经典好用的php 文件上传类,功能相当齐全,留作开发中备用吧. 好东西,大家都喜欢,才是真的好,哈哈!!! <?php  /**   * 文件上传类   */  class upload ...

  3. LintCode #1 A + B 问题

    分析:以3 + 5为例 3的二进制为 1 1,5的二进制为 1 0 1,可以这样做:1先给这两个数加起来不考虑进位,这样得到的结果为 1 1 0,会发现与^得到的结果相同,与是先给两个数 做^运算:2 ...

  4. Maven使用国内镜像

    ^_^ <mirrors> <!-- mirror | Specifies a repository mirror site to use instead of a given re ...

  5. zabbix server端自动发现和zabbix agent端自动注册

    一.zabbix自动发现 利用zabbix的discovery功能可以实现自动批量添加主机的功能. Zabbix自动发现实现自定义主机名: 通过自动发现添加的客户端主机的Host name 是以IP地 ...

  6. ubuntu安装phpVirtualBox web服务

    首先确保已经安装好了 virtualbox,打开了 vboxweb-service $ sudo ls /etc/init.d | grep vboxweb-service     然后, Insta ...

  7. 二维数组按某个键值排序 FOR PHP

    $arr=[ array( 'name'=>'小坏龙', 'age'=>28 ), array( 'name'=>'小坏龙2', 'age'=>14 ), array( 'na ...

  8. MAC 查看端口占用

    命令 lsof -i tcp:[port]  (port替换成端口号,比如6379)可以查看该端口被什么程序占用,并显示PID,方便KILL 之后,kill -9  [PID] , kill进程即可 ...

  9. Centos yum安装java jdk1.8

    yum -y install java-1.8.0-openjdk* 安装后 java -version查看版本 检验是否安装成功. 其安装位置 /usr/lib/jvm/java-1.8.0-ope ...

  10. OpenGL核心技术之帧缓冲

    笔者介绍:姜雪伟.IT公司技术合伙人,IT高级讲师.CSDN社区专家.特邀编辑.畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...