IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 实现一个简单的弹窗组件 -> 正文阅读

[JavaScript知识库]实现一个简单的弹窗组件

弹框组件实现

一、写在前面

最近技术设计评审过程,架构师要求将其中一些共同的业务场景封装为组件,于是产生了这个组件,但是怎么说呢,API不算多,并且适用的场景也比较少,主要还是涉及的组件间传值可以看一下,也欢迎指出问题。

二、实现

import React, { useEffect, useState } from 'react';
import { createPortal } from 'react-dom';
import './index.less'
const Node = document.createElement("div")
const Drawer = (props) => {
    const [closeMantle, setCloseMantle] = useState(false)
    const [childName, setChildName] = useState(props.content[0])
    const [showCancel, setShowCancel] = useState(false)
    /* 点击蒙层关闭 */
    const closeModal = () => {
        if (props.maskClosable === true) setCloseMantle(props.maskClosable);
        else {
            setCloseMantle(false)
        }
    }
    const chooseName = (e, v) => {
        e.stopPropagation()
        props.onChange(v)
        setChildName(v)
        setCloseMantle(!closeMantle)
    }
    useEffect(() => {
        if (props.hideCancel == false) setShowCancel(false);
        else {
            setShowCancel(true)
        }
    }, [])
    const showMantle = () => {
        document.body.appendChild(Node)

        setCloseMantle(!closeMantle)
        // console.log('5648')
    }
    const onMiss = () => {
        props.onCancel()
    }
    return <span onTouchEnd={showMantle}>
        {props.children}
        {createPortal(<div className='modal-container' style={{ display: closeMantle ? '' : 'none' }} onTouchEnd={closeModal}>
            <div className={props.position === 'bottom' ? 'modal-babylist-bottom' : 'modal-babylist-top'}>
                {props.content.map((v, i) => {
                    return <div onTouchEnd={(e) => chooseName(e, v)} key={i} className={childName == v ? 'modal-baby modal-active-name-color' : 'modal-baby'}>{v}</div>
                })}
                <div className='modal-baby-cancel ' style={{ display: showCancel ? '' : 'none' }}><div className='modal-cancel' onTouchEnd={onMiss}>取消</div></div>
            </div>
        </div>, Node)}
    </span>

}
export default Drawer
在react中父子组件之间的传值,父传子通过props来进行接收,子传父的话通过回调函数来进行接收。另外对于一些样式的实现的话通过写入多个类名,设定某个样式对应的一些标识,只需要判别标识来进行展示不同样式,大概就这么多吧。
另外其中有一个Protal将创建的节点挂载到根节点下。
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-18 12:36:40  更:2021-08-18 12:39:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 9:58:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码