react-native弹窗封装的方法

本文实例为大家分享了react-native弹窗封装的具体代码,供大家参考,具体内容如下

上图

仿苹果弹窗组件(android+ios均可用)

以上效果均基于本文的弹窗组件,后续将会介绍上面的组件,也可基于改组件定制更多组件

安装依赖 yarn add react-native-root-siblings 或者 npm install react-native-root-siblings --save

主要代码

显示弹窗

export const showModal = (component) => {
    sibling = new RootSiblings(component);
};

销毁弹窗

export const destroySibling = (component) =>  sibling && sibling.destroy()

更新弹窗

export const update = (index, component) => sibling && sibling.update(<View>{component}</View>)

完整代码

多弹窗管理不涉及,暂时介绍单个弹窗,感兴趣的可以自己试试,将sibling改为数组;

//ShowModal.js
import React from 'react';
import {View} from 'react-native';
import RootSiblings from 'react-native-root-siblings';  //全局弹框组件
let sibling = null;
export const showModal = (component) => {
    sibling = new RootSiblings(component);
};
export const destroySibling = (component) =>  sibling && sibling.destroy()
export const update = (index, component) => sibling && sibling.update(<View>{component}</View>)

使用示例—>淡入背景

组件 ModalBg.js

import React from 'react';
import {Animated, InteractionManager, Easing, TouchableOpacity} from 'react-native';
import {getScreenHeight, getScreenWidth} from '../../utils/util';
import {destroyLastSibling} from '../showModal/ShowModal';
export default class ModalBg extends React.Component {
  animated = new Animated.Value(0);

  isShow = false;

  componentDidMount(): void {
    InteractionManager.runAfterInteractions(() => {
      this.handleAni();
    });
  }

  componentWillUnmount(): void {
    InteractionManager.runAfterInteractions(() => {
      this.handleAni();
    });
  }

  handleAni = () => {
    Animated.timing(this.animated, {
      toValue: this.isShow ? 0 : 1,
      duration: 250,
      easing: Easing.ease
    }).start(() => this.isShow = !this.isShow);
  };

  render() {
    const opct = this.animated.interpolate({
      inputRange: [0, 1],
      outputRange: [0, 0.4]
    });
    return <Animated.View style={{
      position: 'absolute',
      width: getScreenWidth(),
      height: getScreenHeight(),
      backgroundColor: '#000',
      opacity: opct,
      zIndex: 10
    }}><TouchableOpacity onPress={() => {
      destroyLastSibling();
    }} style={{flex: 1}} /></Animated.View>;
  }
}

调用

showModal(<ModalBg />);

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

(0)

相关推荐

  • React弹窗使用方式NiceModal重新思考

    目录 一些有趣的真实场景 案例一:全局弹窗 案例二:存在分支以及依赖关系的弹窗 不那么通用的解决方案 可能是最好的弹窗实践 创建弹窗 使用弹窗 简单实现思路 推荐阅读 一些有趣的真实场景 在开始进入正题之前,先看看一些与弹窗有关的有趣场景

  • React实现动效弹窗组件

    我们在写一些 UI 组件时,若不考虑动效,就很容易实现,主要就是有无的切换(类似于 Vue 中的 v-if 属性)或者可见性的切换(类似于 Vue 中的 v-show 属性). 1. 没有动效的弹窗 在 React 中,可以这样来实现: interface ModalProps { open: boolean; onClose?: () => void; children?: any; } const Modal = ({open. onClose, children}: ModalProps)

  • react实现全局组件确认弹窗

    本例基于react实现了一个简单的确认弹窗,可以让我们在项目中根据需要随时调用 创建全局modal组件 此处我将弹窗模态框独立出来,用户可以通过传入组件或Element来填充模态框的内容. import ReactDOM from 'react-dom'; import React, { Fragment } from 'react'; import Button from 'components/common/button'; import Icon from 'components/comm

  • VSCode 配置React Native开发环境的方法

    本文介绍了VSCode 配置React Native开发环境的方法,分享给大家,具体如下: 1.安装VSCode 2.安装插件 按F1 并输入 ext install 并回车, 或者使用 输入react-native安装React Native Tools 假定你已经在设备上安装了react native, 如果没有安装,请使用npm install -g react-native-cli安装 或者按照官方文档操作 新建一个RN工程 并使用VSCode打开 安装完成后 按F1可以看到命令里多了很

  • 微信小程序实现自定义modal弹窗封装的方法

    前言 小程序官方提供了 wx.showModal 方法,但样式比较固定,不能满足多元化需求,自定义势在必行~ 老规矩先上图 点击某个按钮,弹出 modal框,里面的内容可以自定义,可以是简单的文字提示,也可以输入框等复杂布局.操作完点击取消或确定关闭 modal. 如何使用 将下面的 modal.wxml .modal.wxss .modal.js .modal.json 四个文件复制到对应位置即可. 封装完之后调用起来也很简单,看看调用的代码吧 <modal show="{{showMo

  • react native 获取地理位置的方法示例

    react native 官网介绍了这个 api Geolocation 但是这个api只能返回 经纬度 所以要把经纬度 通过逆地理位置转义 http://recode.ditu.aliyun.com/jsdoc/geocode_api.html 可通过这个阿里的开放接口 在 react native 中,我们所用的是react native 自带的api定位功能,无需引入第三方js. react native 定位是通过Geolocation这个模块来实现的.想了解更多关于Geolocatio

  • React Native开发封装Toast与加载Loading组件示例

    在App开发中,我们避免不了使用的两个组件,一个Toast,一个网络加载Loading,在RN开发中,也是一样,React Native官方并没有提供者这两个常用组件,需要开发者自己根据需求来自定义.作者就在其他组件的基础上在进行二次封装,使用起来更加简单,更具扩展性,同学们只需将Toast与Loading文件拖到项目中,install对应的组件库即可 效果图 Toast和Loading Demo地址 https://github.com/guangqiang-liu/react-native-

  • react-native弹窗封装的方法

    本文实例为大家分享了react-native弹窗封装的具体代码,供大家参考,具体内容如下 上图 仿苹果弹窗组件(android+ios均可用) 以上效果均基于本文的弹窗组件,后续将会介绍上面的组件,也可基于改组件定制更多组件 安装依赖 yarn add react-native-root-siblings 或者 npm install react-native-root-siblings --save 主要代码 显示弹窗 export const showModal = (component)

  • 深入了解响应式React Native Echarts组件

    前言 一种在 React Native 中封装的响应式 Echarts 组件,使用与示例请参见:react-native-echarts-demo 近年来,随着移动端对数据可视化的要求越来越高,类似 MPAndroidChart这样的传统图表库已经不能满足产品经理日益变态的需求.前端领域数据可视化的发展相对繁荣一些,通过 WebView 在移动端使用 Echarts 这样功能强大的前端数据可视化库,是解决问题的好办法. React Native 开发中,由于使用的是与前端相同的 JavaScri

  • 详解钉钉小程序组件之自定义模态框(弹窗封装实现)

    背景 开发钉钉小程序中需要用到模态框 文档里也没有 自己搞一个- 效果大概长这个样 点击指定按钮,弹出模态框,里面的内容可以自定义,可以是简单的文字提示,也可以输入框等复杂布局.操作完点击取消或确定关闭. 开始封装 上图所示文件内容放入项目即可 (路径自己高兴着来) modal.js 内容不多 但都是精华 /** * 自定义modal浮层 * 使用方法: * <modal show="{{showModal}}" height='80%' onCancel="modal

  • React Native Modal 的封装与使用实例详解

    目录 背景 Android FullScreenModal 的封装使用 Android 原生实现全屏 Dialog 封装给 RN 进行相关的调用 Android 原生部分实现 JS 部分实现 使用 RootSiblings 封装 Modal 实现界面 Render 相关 实现 Modal 展示动画相关 使用 View 封装 Modal 整体 Modal 控件的封装 其他 Android Back 键的注意 View 封装 Modal 时候的注意 最后 背景 在使用 React Native(以下

  • react native中的聊天气泡及timer封装成的发送验证码倒计时

    其实,今天我想把我近期遇到的坑都总结一下: 1.goBack的跨页面跳转,又两种方法,一可以像兔哥那样修改navigation源码,二可以用navigationActions 2.父子组件的传值,一可以用callBack  二可以用pubsub发布订阅模式 三可以用manager事件监听(a页面要显示的内容 有两种形式,一是从manager主动接收,也就是说不需要点击什么的获取数据,而是时时监听manager里数据的变化,第二种a页面获取要显示内容的形式是 点击出发,获取) 3 需要说的还是na

  • React Native自定义标题栏组件的实现方法

    大家好,今天讲一下如何实现自定义标题栏组件,我们都知道RN有一个优点就是可以组件化,在需要使用该组件的地方直接引用并传递一些参数就可以了,这种方式确实提高了开发效率. 标题栏是大多数应用界面必不可少的一部分,将标题栏剥离出来做成一个组件很有必要.今天先讲一个不带返回按钮的标题栏.废话少说,直接上代码: /** * 封装公共的标题头,没有返回按钮 */ 'use strict'; import React, { Component } from 'react'; import { Text, Vi

随机推荐