React-Native 组件之 Modal的使用详解


Posted in Javascript onAugust 08, 2017

Modal组件可以用来覆盖包含React Native根视图的原生视图(如UIViewController,Activity),用它可以实现遮罩的效果。

属性

Modal提供的属性有:

animationType(动画类型) PropTypes.oneOf([‘none', ‘slide', ‘fade']

  • none:没有动画
  • slide:从底部滑入
  • fade:淡入视野

onRequestClose(被销毁时会调用此函数)

在 ‘Android' 平台,必需调用此函数

onShow(模态显示的时候被调用)

transparent (透明度) bool

为true时,使用透明背景渲染模态。

visible(可见性) bool

onOrientationChange(方向改变时调用)

在模态方向变化时调用,提供的方向只是 ” 或 ”。在初始化渲染的时候也会调用,但是不考虑当前方向。

supportedOrientations(允许模态旋转到任何指定取向)[‘portrait', ‘portrait-upside-down', ‘landscape','landscape-left','landscape-right'])

在iOS上,模态仍然受 info.plist 中的 UISupportedInterfaceOrientations字段中指定的限制。

示例

Modal的使用非常简单,例如:

<Modal
 animationType='slide'      // 从底部滑入 
 transparent={false}       // 不透明
 visible={this.state.isModal}  // 根据isModal决定是否显示
 onRequestClose={() => {this.onRequestClose()}} // android必须实现
 >

综合例子:

import React, { Component} from 'react';
import {
  AppRegistry,
  View,
  Modal,
  TouchableOpacity,
  Text
} from 'react-native';
export default class ModalView extends Component {
  constructor(props) {
    super(props);
    this.state = {
      modalVisible: false,
    }
  }
  setModalVisible = (visible)=> {
    this.setState({
      modalVisible: visible
    })
  };
  render(){
    return(
      <View style={{flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: '#ffaaff'}}>
        <Modal animationType={'none'}
            transparent={true}
            visible={this.state.modalVisible}
            onrequestclose={() => {alert("Modal has been closed.")}}
            onShow={() => {alert("Modal has been open.")}}
            supportedOrientations={['portrait', 'portrait-upside-down', 'landscape', 'landscape-left', 'landscape-right']}
            onOrientationChange={() => {alert("Modal has been OrientationChange.")}}>
          <View style={{flex:1, marginTop: 22, backgroundColor: '#aaaaaa', justifyContent: 'center', alignItems: 'center'}}>
            <View>
              <Text>Hello World!</Text>
              <TouchableOpacity onPress={() => {
                this.setModalVisible(false)
              }}>
                <Text>隐藏 Modal</Text>
              </TouchableOpacity>
            </View>
          </View>
        </Modal>
        <TouchableOpacity onPress={() => {
          this.setModalVisible(true)
        }}>
          <Text>显示 Modal</Text>
        </TouchableOpacity>
      </View>
    )
  }
}
AppRegistry.registerComponent('ModalView', ()=>ModalView);

 运行效果:

React-Native 组件之 Modal的使用详解

从 modal 的源码可以看出,modal 其实就是使用了 绝对定位,所以当 modal 无法满足我们的需求的时候,我们就可以通过 绝对定位 自己来封装一个 modal

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 学习 - 提高篇
Feb 02 Javascript
javascript innerHTML、outerHTML、innerText、outerText的区别
Nov 24 Javascript
jquery操作HTML5 的data-*的用法实例分享
Aug 17 Javascript
ie8模式下click无反应点击option无反应的解决方法
Oct 11 Javascript
用模版生成HTML的的框架jquery.tmpl使用详解
Jan 07 Javascript
javascript 使用for循环时该注意的问题-附问题总结
Aug 19 Javascript
javascript实现无缝上下滚动特效
Dec 16 Javascript
Bootstrap栅格系统学习笔记
Nov 25 Javascript
JS实现控制图片显示大小的方法【图片等比例缩放功能】
Feb 18 Javascript
jQuery中table数据的值拷贝和拆分
Mar 19 Javascript
jQuery实现的form转json经典示例
Oct 10 jQuery
js canvas实现二维码和图片合成的海报
Nov 19 Javascript
基于jQuery对象和DOM对象和字符串之间的转化实例
Aug 08 #jQuery
超级简易的JS计算器实例讲解(实现加减乘除)
Aug 08 #Javascript
浅谈ES6新增的数组方法和对象
Aug 08 #Javascript
Angularjs上传文件组件flowjs功能
Aug 07 #Javascript
详解Vue的computed(计算属性)使用实例之TodoList
Aug 07 #Javascript
详解express与koa中间件模式对比
Aug 07 #Javascript
JS实现简单短信验证码界面
Aug 07 #Javascript
You might like
php版微信自动登录并获取昵称的方法
2016/09/23 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
2019/04/09 PHP
PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解
2020/02/12 PHP
经典的解除许多网站无法复制文字的绝招
2006/12/31 Javascript
JQuery 构建客户/服务分离的链接模型中Table分页代码效率初探
2010/01/22 Javascript
Extjs优化(二)Form表单提交通用实现
2013/04/15 Javascript
js格式化时间小结
2014/11/03 Javascript
jQuery实现只允许输入数字和小数点的方法
2016/03/02 Javascript
谈谈PHP中相对路径的问题与绝对路径的使用
2016/08/16 Javascript
基于javascript实现的快速排序
2016/12/02 Javascript
jQuery自定义图片上传插件实例代码
2017/04/04 jQuery
ES6入门教程之Class和Module详解
2017/05/17 Javascript
jquery处理checkbox(复选框)是否被选中实例代码
2017/06/12 jQuery
解决vue 打包发布去#和页面空白的问题
2018/09/04 Javascript
[01:11:15]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[57:37]EG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python3基础之基本运算符概述
2014/08/13 Python
超简单的Python HTTP服务
2019/07/22 Python
关于Python不换行输出和不换行输出end=““不显示的问题(亲测已解决)
2020/10/27 Python
Python实现王者荣耀自动刷金币的完整步骤
2021/01/22 Python
CSS3 优势以及网页设计师如何使用CSS3技术
2009/07/29 HTML / CSS
加拿大约会网站:EliteSingles.ca
2018/01/12 全球购物
Ariat英国官网:为世界顶级马术运动员制造最优质的鞋类和服装
2020/02/14 全球购物
DBA数据库管理员JAVA程序员架构师必看
2016/02/07 面试题
sleep()方法和wait()方法的区别是什么
2012/11/17 面试题
电气个人求职信范文
2014/02/04 职场文书
大二学生职业生涯规划书
2014/02/05 职场文书
初中生操行评语大全
2014/04/24 职场文书
机票销售员态度不好检讨书
2014/09/27 职场文书
2015年纪委工作总结
2015/05/13 职场文书
2015年社区国庆节活动总结
2015/07/30 职场文书
信息技术课教学反思
2016/02/23 职场文书
MySQL REVOKE实现删除用户权限
2021/06/18 MySQL
go语言使用Casbin实现角色的权限控制
2021/06/26 Golang
浅谈Redis缓冲区机制
2022/06/05 Redis
el-form每行显示两列底部按钮居中效果的实现
2022/08/05 HTML / CSS