React Native使用Modal自定义分享界面的示例代码


Posted in Javascript onOctober 31, 2017

在很多App中都会涉及到分享,React Native提供了Modal组件用来实现一些模态弹窗,例如加载进度框,分享弹框等。使用Modal搭建分析的效果如下:

React Native使用Modal自定义分享界面的示例代码React Native使用Modal自定义分享界面的示例代码

自定义的分析界面代码如下:

ShareAlertDialog.js

/**
 * https://github.com/facebook/react-native
 * @flow 分享弹窗
 */


import React, {Component} from 'react';
import {View, TouchableOpacity, Alert,StyleSheet, Dimensions, Modal, Text, Image} from 'react-native';
import Separator from "./Separator";

const {width, height} = Dimensions.get('window');
const dialogH = 110;

export default class ShareAlertDialog extends Component {

  constructor(props) {
    super(props);
    this.state = {
      isVisible: this.props.show,
    };
  }

  componentWillReceiveProps(nextProps) {
    this.setState({isVisible: nextProps.show});
  }

  closeModal() {
    this.setState({
      isVisible: false
    });
    this.props.closeModal(false);
  }

  renderDialog() {
    return (
      <View style={styles.modalStyle}>
        <Text style={styles.text}>选择分享方式</Text>
        <Separator/>
        <View style={{flex: 1, flexDirection: 'row', marginTop: 15}}>
          <TouchableOpacity style={styles.item} onPress={() => Alert.alert('分享到微信朋友圈')}>
            <Image resizeMode='contain' style={styles.image}
                source={require('../images/share_ic_friends.png')}/>
            <Text>微信朋友圈</Text>
          </TouchableOpacity>
          <TouchableOpacity style={styles.item}>
            <Image resizeMode='contain' style={styles.image}
                source={require('../images/share_ic_weixin.png')}/>
            <Text>微信好友</Text>
          </TouchableOpacity>
          <TouchableOpacity style={styles.item}>
            <Image resizeMode='contain' style={styles.image}
                source={require('../images/share_ic_weibo.png')}/>
            <Text>新浪微博</Text>
          </TouchableOpacity>
        </View>
      </View>
    )
  }

  render() {

    return (
      <View style={{flex: 1}}>
        <Modal
          transparent={true}
          visible={this.state.isVisible}
          animationType={'fade'}
          onRequestClose={() => this.closeModal()}>
          <TouchableOpacity style={styles.container} activeOpacity={1}
                   onPress={() => this.closeModal()}>
            {this.renderDialog()}
          </TouchableOpacity>
        </Modal>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: 'rgba(0, 0, 0, 0.5)',
  },
  modalStyle: {
    position: "absolute",
    top: height - 170,
    left: 0,
    width: width,
    height: dialogH,
    backgroundColor: '#ffffff'
  },
  subView: {
    width: width,
    height: dialogH,
    backgroundColor: '#ffffff'
  },
  text: {
    flex: 1,
    fontSize: 18,
    margin: 10,
    justifyContent: 'center',
    alignItems: 'center',
    alignSelf: 'center'
  },
  item: {
    width: width / 3,
    height: 100,
    alignItems: 'center',
    backgroundColor: '#ffffff'
  },
  image: {
    width: 60,
    height: 60,
    marginBottom: 8
  },
});

当点击某个按钮之后,就会弹出框,示例代码如下:

constructor(props) {
    super(props);
    this.state = {
      showSharePop: false,//分享弹窗,默认不显示
    }
  }


//省略

onSharePress() {
    this.setState({showSharePop: !this.state.showSharePop})
  }
//增加点击
<NavigationBar
          navigator={this.props.navigator}
          popEnabled={false}
          style={{backgroundColor: "transparent", position: "absolute", top: 0, width}}
          leftButton={ViewUtils.getLeftButton(() => this.props.navigator.pop())}
          rightButton={ViewUtils.getShareButton(() => this.onSharePress())}/>

//添加ShareAlertDialog自定义组件
<ShareAlertDialog show={this.state.showSharePop} closeModal={(show) => {
          this.setState({showSharePop: show})
        }} {...this.props}/>

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

Javascript 相关文章推荐
pjblog中的UBBCode.js
Apr 25 Javascript
jquery 事件对象属性小结
Apr 27 Javascript
浏览器的JavaScript引擎的识别方法
Oct 20 Javascript
JavaScript点击按钮后弹出透明浮动层的方法
May 11 Javascript
Bootstrap入门书籍之(四)菜单、按钮及导航
Feb 17 Javascript
Bootstrap实现下拉菜单多级联动
Nov 23 Javascript
JavaScript继承定义与用法实践分析
May 28 Javascript
Angularjs中的$apply及优化使用详解
Jul 02 Javascript
Mint UI组件库CheckList使用及踩坑总结
Dec 20 Javascript
vue实现设置载入动画和初始化页面动画效果
Oct 28 Javascript
js实现动态时钟
Mar 12 Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
Dec 01 Javascript
Bootstrap3.3.7导航栏下拉菜单鼠标滑过展开效果
Oct 31 #Javascript
使用nvm管理不同版本的node与npm的方法
Oct 31 #Javascript
javascript高级模块化require.js的具体使用方法
Oct 31 #Javascript
JS简单实现点击跳转登陆邮箱功能的方法
Oct 31 #Javascript
jQuery简单实现对数组去重及排序操作实例
Oct 31 #jQuery
Node.js学习教程之HTTP/2服务器推送【译】
Oct 31 #Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
Oct 31 #Javascript
You might like
php自定义函数转换html标签示例
2016/09/29 PHP
php图像处理函数imagecopyresampled用法详解
2016/12/02 PHP
Smarty3配置及入门语法
2017/02/22 PHP
Laravel框架下载,安装及路由操作图文详解
2019/12/04 PHP
PHP命名空间(namespace)原理与用法详解
2019/12/11 PHP
20个非常棒的Jquery实用工具 国外文章
2010/01/01 Javascript
基于JQuery的模拟苹果桌面Dock效果(稳定版)
2012/10/15 Javascript
浅析js中2个等号与3个等号的区别
2013/08/06 Javascript
html的DOM中Event对象onabort事件用法实例
2015/01/21 Javascript
JQuery跳出each循环的方法
2015/04/16 Javascript
JQuery判断checkbox是否选中及其它复选框操作方法合集
2015/06/01 Javascript
JS+CSS实现的蓝色table选项卡效果
2015/10/08 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
2016/04/14 Javascript
jQuery解决$符号命名冲突
2016/06/18 Javascript
jQuery文本框得到与失去焦点动态改变样式效果
2016/09/08 Javascript
AngularJS监听ng-repeat渲染完成的两种方法
2018/01/16 Javascript
js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
2019/01/19 Javascript
JQuery属性操作与循环用法示例
2019/05/15 jQuery
Vue源码分析之Vue实例初始化详解
2019/08/25 Javascript
深入解读VUE中的异步渲染的实现
2020/06/19 Javascript
解决vue+elementui项目打包后样式变化问题
2020/08/03 Javascript
你不知道的 TypeScript 高级类型(小结)
2020/08/28 Javascript
[52:27]2018DOTA2亚洲邀请赛 3.31 小组赛B组 paiN vs Secret
2018/04/01 DOTA
利用python模拟sql语句对员工表格进行增删改查
2017/07/05 Python
Python tkinter事件高级用法实例
2018/01/31 Python
java判断三位数的实例讲解
2019/06/10 Python
Pandas对每个分组应用apply函数的实现
2020/12/13 Python
pyspark对Mysql数据库进行读写的实现
2020/12/30 Python
Python中使用Selenium环境安装的方法步骤
2021/02/22 Python
主管会计岗位职责
2014/03/13 职场文书
幼儿园小班评语大全
2014/04/17 职场文书
大学生演讲稿
2014/04/25 职场文书
中国梦演讲稿5分钟
2014/08/19 职场文书
2014年纳税评估工作总结
2014/12/23 职场文书
写给医生的感谢信
2015/01/22 职场文书
2015年学校体育工作总结
2015/04/22 职场文书