博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何用React写一个Modal组件
阅读量:6387 次
发布时间:2019-06-23

本文共 2899 字,大约阅读时间需要 9 分钟。

要求: 组件讲究的是复用性,和可移植性。

可复用:就是要做到组件逻辑功能和业务逻辑功能互不影响也就是所谓的解藕。

可移植:就是要做到软件(组件)与系统无关,也就是没有外部依赖。

也称无状态组件在这里得到了很好的应用。

最简单的纯函数组件

const text = props=>{props.text}复制代码

思路: Modal 的实现思路极其简单

const Modal = props=>props.visibale ? 
: null复制代码

数据采用从父组件接收 props 的方式获取而不采用 state 能实现 Modal 组件视图与数据的分离,除了耦合从而达到了可复用的目的。

只需将 props 中的

title (标题)

content (内容)

onOk (确认事件)

onCancel (取消事件)

按照一定的逻辑放置在 Modal 中即可

(当然还有其他的参数比如 width height 就不一一列举)

以下是我的实现:

实现:

Modal.jsx 文件

import React from 'react'import './Modal.css'const Modal = props => props.visible ? (
{props.title}
{props.content}
{props.conFirmText}
{props.cancelText}
) : nullconst noop = _=> undefinedModal.defaultProps = { onOk: noop, onCancel: noop, conFirmText: '确定', cancelText: '取消', titleClass: 'modal-title', contentClass: 'modal-text', footerClass: 'modal-footer', okClass: 'modal-confirm', cancelClass: 'modal-cancel', height:'auto', width:'400px', opacity: 0.6}export default Modal复制代码

Modal.css 文件

.modal-box {    position: fixed;    top: 0;    right: 0;    bottom: 0;    left: 0;    z-index: 9999;    /* background-color: rgba(0, 0, 0, 0.8); */    display: flex;    justify-content: center;    align-items: center;}.modal-content {    position: relative;    min-width: 400px;    background-color: white;    padding: 40px;    box-sizing: border-box;}.modal-title{    font-weight: bold;    font-size: 22px}.modal-text {    font-size: 16px;}.modal-footer {    }.modal-confirm,.modal-cancel {    width: 100px;    height: 30px;    line-height: 30px;    text-align: center;    cursor: pointer;    position: absolute;    bottom: 40px;}.modal-confirm {    left: 40px;}.modal-cancel {    right: 40px;}复制代码

使用方式:

属性 说明 默认值 类型
onOk 点击确定的回调函数 noop function
onCancel 点击取消的回调函数 noop function
conFirmText 确定按钮自定义文字 '确定' string
cancelText 取消按钮自定义文字 '取消' string
titleClass 对话框 title 自定义样式 'modal-title' string
contentClass 对话框内容自定义样式 'modal-text' string
footerClass 对话框确定取消按钮容器自定义样式 'modal-footer string
okClass 对话框确定按钮自定义样式 'modal-confirm' string
cancelClass 对话框取消按钮自定义样式 'modal-cancel' string
height 对话框宽度 'auto' string
width 对话框高度 '400px' string
opacity 对话框透明度 0.6 nunmber

demo.js 文件

import React, { Component } from 'react';import './App.css';import Modal from './Modal/Modal.jsx'class App extends Component {  constructor(){    super()    this.state = {      title: 'React Modal',      content: '欢迎使用!',      visible: false    }  }  openModal(){    this.setState({      visible: true    })  }  onOk(){    this.setState({      visible:false    })  }  onCancel(){    this.setState({      visible:false    })  }  render() {    return (      
开启弹窗
); }}export default App;复制代码

转载于:https://juejin.im/post/5cab6d6b6fb9a068b3676fec

你可能感兴趣的文章
linux下core file size设置笔记
查看>>
mysql 、redis的区别
查看>>
使用JPA中@Query 注解实现update 操作
查看>>
7.4. APC Cache (php-apc - APC (Alternative PHP Cache) module for PHP 5)
查看>>
Web 仪表盘
查看>>
我的Fedora 7硬盘安装过程
查看>>
18.4. FAQ
查看>>
Python——SSHClient.py
查看>>
MVC解决更新冲突问题
查看>>
江西理工大学南昌校区cool code竞赛
查看>>
[LeetCode] Trim a Binary Search Tree 修剪一棵二叉搜索树
查看>>
Ubuntu SDL lib 安装
查看>>
Java 并发编程内部分享PPT分享
查看>>
关于discuz中禾金投票系统循环出现引导页的问题
查看>>
C#开源系统大汇总
查看>>
Linux服务器安全初始化自选安装Shell脚本
查看>>
PyCharm教程
查看>>
Python 简单的数据结构(一)
查看>>
谁说我们只会做工作流?做实验室管理系统我们也内行。
查看>>
yum安装开发库
查看>>