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 相关文章推荐
改变javascript函数内部this指针指向的三种方法
Apr 23 Javascript
使用Javascript接收get传递的值的代码
Nov 30 Javascript
使用javascript实现简单的选项卡切换
Jan 09 Javascript
jquery实现相册一下滑动两次的方法
Feb 09 Javascript
jQuery实现简洁的导航菜单效果
Nov 23 Javascript
jQuery事件绑定on()与弹窗实现代码
Apr 28 Javascript
bootstrap组件之导航组件使用方法
Jan 19 Javascript
微信小程序 ecshop地址三级联动实现实例代码
Feb 28 Javascript
Vue.js+Layer表格数据绑定与实现更新的实例
Mar 07 Javascript
vue.js使用v-pre与v-html输出HTML操作示例
Jul 07 Javascript
微信小程序实现炫酷的弹出式菜单特效
Jan 28 Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
May 07 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正则的Unknown Modifier错误解决方法
2010/03/02 PHP
按上下级层次关系输出内容的PHP代码
2010/07/17 PHP
PHP输出英文时间日期的安全方法(RFC 1123格式)
2014/06/13 PHP
javascript 自动转到命名锚记
2009/01/10 Javascript
关于IE BUG与字符串截取substr的解决办法
2013/04/10 Javascript
Jquery 的outerHeight方法使用介绍
2013/09/11 Javascript
javascript实现原生ajax的几种方法介绍
2013/09/21 Javascript
简介JavaScript中toUpperCase()方法的使用
2015/06/06 Javascript
详解AngularJS中的依赖注入机制
2015/06/17 Javascript
JavaScript函数的调用以及参数传递
2015/10/21 Javascript
Validform+layer实现漂亮的表单验证特效
2016/01/17 Javascript
Angular.js如何从PHP读取后台数据
2016/03/24 Javascript
利用jQuery对无序列表排序的简单方法
2016/10/16 Javascript
jQuery自定义组件(导入组件)
2016/11/08 Javascript
jquery的父、子、兄弟节点查找,节点的子节点循环方法
2016/12/07 Javascript
angular中的cookie读写方法
2017/08/02 Javascript
JS实现下拉菜单列表与登录注册弹窗效果
2017/08/10 Javascript
vuex的使用及持久化state的方式详解
2018/01/23 Javascript
微信小程序内拖动图片实现移动、放大、旋转的方法
2018/09/04 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
2020/08/13 Javascript
python中WSGI是什么,Python应用WSGI详解
2017/11/24 Python
Selenium 模拟浏览器动态加载页面的实现方法
2018/05/16 Python
详解配置Django的Celery异步之路踩坑
2018/11/25 Python
利用Python求阴影部分的面积实例代码
2018/12/05 Python
Django web框架使用url path name详解
2019/04/29 Python
django 中QuerySet特性功能详解
2019/07/25 Python
Python如何使用BeautifulSoup爬取网页信息
2019/11/26 Python
Python开发.exe小工具的详细步骤
2021/01/27 Python
华丽的手绘陶瓷:MacKenzie-Childs
2017/02/04 全球购物
施华洛世奇加拿大官网:SWAROVSKI加拿大
2018/06/03 全球购物
旅游管理毕业生自荐书
2014/02/02 职场文书
2014领导干部学习焦裕禄同志先进事迹思想汇报
2014/09/19 职场文书
2014年化验室工作总结
2014/11/21 职场文书
初中班级口号霸气押韵
2015/12/24 职场文书
javascript canvas实现雨滴效果
2021/06/09 Javascript
《王者天下》第4季首话新剧照 4月9日正式开播
2022/04/07 日漫