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的数组与字典用法与遍历对象的属性技巧
Nov 07 Javascript
javascript中强制执行toString()具体实现
Apr 27 Javascript
js 实现菜单上下显示附效果图
Nov 21 Javascript
jQuery中获取checkbox选中项等操作及注意事项
Nov 24 Javascript
Extjs grid添加一个图片状态或者按钮的方法
Apr 03 Javascript
js实现jquery的offset()方法实例
Jan 10 Javascript
javascript实现带节日和农历的日历特效
Feb 01 Javascript
浅谈js里面的InttoStr和StrtoInt
Jun 14 Javascript
AngularJS中$http的交互问题
Mar 29 Javascript
详解wow.js中各种特效对应的类名
Sep 13 Javascript
JavaScript实现短信倒计时60s
Oct 09 Javascript
vue-router路由模式详解(小结)
Aug 26 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读取MySQL数据代码
2008/06/05 PHP
php设置编码格式的方法
2013/03/05 PHP
PHP导航下拉菜单的实现如此简单
2013/09/22 PHP
php中apc缓存使用示例
2013/12/25 PHP
php调用自己java程序的方法详解
2016/05/13 PHP
PHP获取数组中单列值的方法
2017/06/10 PHP
laravel框架邮箱认证实现方法详解
2019/11/22 PHP
JavaScript 面向对象的 私有成员和公开成员
2010/05/13 Javascript
jQuery中:focus选择器用法实例
2014/12/30 Javascript
PHP中CURL的几个经典应用实例
2015/01/23 Javascript
Bootstrap所支持的表单控件实例详解
2016/05/16 Javascript
jQuery移动端图片上传组件
2016/06/12 Javascript
使用微信小程序开发前端【快速入门】
2016/12/05 Javascript
浅谈Angular路由守卫
2017/08/26 Javascript
Angular2监听页面大小变化的解决方法
2017/10/09 Javascript
微信小程序3种位置API的使用方法详解
2019/08/05 Javascript
vue 解除鼠标的监听事件的方法
2019/11/13 Javascript
微信域名检测接口调用演示步骤(含PHP、Python)
2019/12/08 Javascript
[48:30]LGD vs infamous Supermajor小组赛D组 BO3 第一场 6.3
2018/06/04 DOTA
Python自动化构建工具scons使用入门笔记
2015/03/10 Python
Python进程通信之匿名管道实例讲解
2015/04/11 Python
python使用scrapy发送post请求的坑
2018/09/04 Python
python实时获取外部程序输出结果的方法
2019/01/12 Python
python 中Arduino串口传输数据到电脑并保存至excel表格
2019/10/14 Python
python代码如何实现余弦相似性计算
2020/02/09 Python
HTML5新表单元素_动力节点Java学院整理
2017/07/12 HTML / CSS
全球航班旅行搜索网站:Cheapflights
2017/05/19 全球购物
物流仓管员岗位职责
2013/12/04 职场文书
中式面点餐厅创业计划书
2014/01/29 职场文书
心理咨询承诺书
2014/05/20 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
大学新生军训自我鉴定
2014/09/18 职场文书
单位单身证明样本
2014/10/11 职场文书
2015年银行个人工作总结
2015/05/14 职场文书
《从现在开始》教学反思
2016/02/16 职场文书
Vue elementUI表单嵌套表格并对每行进行校验详解
2022/02/18 Vue.js