详细介绍React模态框组件react-modal

简介: 该组件实现了模态框的一些效果。这是react-modal官网的配置参数。

1,介绍

  • 该组件实现了模态框的一些效果。
  • 这是react-modal官网的配置参数。

模态框的手动实现,并不算太难,这个组件用着还不错。

2,配置参数介绍

import React, { Component } from 'react';
import Modal from 'react-modal'
import './App.css';

class App extends Component {
  constructor () {
    super();
    this.state = {
      showModal: false  // 用于设置模态框的显示隐藏
    };
  }

  openModal = () => {
    this.setState({ showModal: true });
  }

  closeModal = () => {
    this.setState({ showModal: false });
  }

  // 模态框打开后,执行的函数
  handleAfterOpenFunc = () => {
    console.log('open~')
  }

  // 该函数,下面会有介绍
  handleAfterCloseFunc = () => {
    console.log('close~')
  }

  // 用于测试获取的DOM节点
  openRef = () => {
    console.log(this.overlayRef)
    console.log(this.contentRef)
  }

  // 指定模态框的父级
  getParent = () => {
    return document.querySelector('#App');
  }

  /*
  * react-modal最终生成的DOM默认是作为body的子元素。
  *   以此例来说,最终位置
  *   <div className="App">
        <div onClick={this.toggle}>点我</div>
      </div>

      Modal单独生成的DOM(位置可变,下面有说)
      <div portal>
        ...
      </div>
  *
  * Modal单独生成的DOM,4层div
  * |div Portal 没有默认样式
  *
  *   |div  overlay 有默认的内联样式
  *       position: fixed;
          top: 0px;
          left: 0px;
          right: 0px;
          bottom: 0px;
          background-color: rgba(255, 255, 255, 0.75);
  *
  *       |div content 有默认的内联样式
  *           绝对定位等一大推
  *
  *           |div 指<Modal></Model>标签中包含的自定义元素
  * */
  render() {
    return (
      <div id="App">
        <button onClick={this.openModal}>打开模态框</button>
        <button onClick={this.openRef}>测试获取DOM节点</button>
        <Modal
          isOpen={this.state.showModal}   // modal容器是否显示
          overlayClassName="overlay"   // 指定div overlay的classname。(可覆盖默认样式)
          className="content"   // 指定div content的classname。(可覆盖默认样式)
          style={{ overlay: {}, content: {} }}  // div overlay和content的样式,也可以直接在这里指定。
          onAfterOpen={this.handleAfterOpenFunc}  // 在模态框打开后,执行的函数

          // 当请求关闭模态框时,执行的函数!
          // (模态框不一定会关闭,因为是否关闭取决于isOpen特性,如果在当前函数中,改变了isOpen:false,才会关闭)
          //   只有两种情况,才会执行目标函数。
          //   1,当shouldCloseOnOverlayClick为true时,在div overlay上点击,会触发
          //   2,当shouldCloseOnEsc为true时,并且选中了div content
          //        也就是说,如果shouldFocusAfterRender也为true,按esc键就会触发。
          //        或者,shouldFocusAfterRender为false时,手动选中div content,按esc键就会触发。
          onRequestClose={this.handleAfterCloseFunc}
          closeTimeoutMS={1000} // 指定,在发出关闭命令后,模态框延迟关闭的时间,默认0
          shouldCloseOnOverlayClick={true}   // 指定在div overlay上点击,是否关闭模态框,默认true
          shouldFocusAfterRender={false}  //指定模态框出现后,是否被默认选中,默认true
          shouldCloseOnEsc={true}  // 指定按esc键,是否关闭模态框,默认true(要选中div content,才有效)
          shouldReturnFocusAfterClose={false} // 指定是否应将焦点恢复到,显示前具有焦点的元素,默认true

          overlayRef={node => this.overlayRef = node}   // 可以获取div overlay的整个DOM节点
          contentRef={node => this.contentRef = node}   // 可以获取div content的整个DOM节点
          parentSelector={this.getParent}   // 配合指定的方法,指定"Modal单独生成的DOM"的父级元素,该demo中,指定到了div App中
          ariaHideApp={false}   //如果没有添加到某个DOM节点中,就会显示警告,为了不显示警告,设置为false,默认true。

          // portalClassName="protal"   // 指定div Portal的classname(因为没有默认样式,所以一般不用指定)。
          // contentLabel="一个demo"   // 显示在div content的自定义属性:aria-label="通告给屏幕的内容"。
        >
          <button onClick={this.closeModal}>关闭模态框</button>
        </Modal>
      </div>
    );
  }
}

export default App;
复制代码
  • 这是css

一般来说,这两个div应该是重叠在一起显示的,这里设置的样式,将其分开,是为了测试演示效果。

.overlay {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  margin: auto;
  width: 300px;
  height: 300px;
  border: 5px solid silver;
  animation: fade 2s;
}
.content {
  position: absolute;
  width: 50%;
  height: 50%;
  border: 5px solid salmon;
  animation: fade 2s;
}
/*
* 这里,我自己指定了一个过渡动画。
*/
@keyframes fade {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
复制代码

以上,就是整体的配置参数的介绍,希望对大家有帮助。


原文发布时间为:2018年06月28日
原文作者:非梧不栖
本文来源: 掘金  如需转载请联系原作者
相关文章
|
20天前
|
前端开发 UED 开发者
React 悬浮按钮组件 FloatingActionButton
悬浮按钮(FAB)是常见的UI元素,用于提供突出的操作。本文介绍如何在React中使用Material-UI创建美观的FAB组件,涵盖基本概念、实现方法及常见问题解决。通过代码示例和优化技巧,帮助开发者提升用户体验,确保按钮位置、颜色、交互反馈等方面的表现,同时避免无障碍性和性能问题。
118 80
|
28天前
|
前端开发 JavaScript 开发者
React 按钮组件 Button
本文介绍了 React 中按钮组件的基础概念,包括基本的 `&lt;button&gt;` 元素和自定义组件。详细探讨了事件处理、参数传递、状态管理、样式设置和可访问性优化等常见问题及其解决方案,并提供了代码示例。帮助开发者避免易错点,提升按钮组件的使用体验。
183 77
|
26天前
|
存储 前端开发 UED
React 面包屑组件 Breadcrumb 详解
面包屑导航是现代Web应用中常见的UI元素,帮助用户了解当前位置并快速返回上级页面。本文介绍如何使用React构建面包屑组件,涵盖基本概念、实现方法及常见问题。通过函数式组件和钩子,结合React Router动态生成路径,处理嵌套路由,并确保可访问性。示例代码展示了静态和动态面包屑的实现,帮助开发者提升用户体验。
136 73
|
2月前
|
前端开发 JavaScript 测试技术
React 分页组件 Pagination
本文介绍了如何在 React 中从零构建分页组件,涵盖基础概念、常见问题及解决方案。通过示例代码详细讲解了分页按钮的创建、分页按钮过多、初始加载慢、状态管理混乱等常见问题的解决方法,以及如何避免边界条件、性能优化和用户反馈等方面的易错点。旨在帮助开发者更好地理解和掌握 React 分页组件的开发技巧,提升应用的性能和用户体验。
97 0
|
29天前
|
前端开发 UED 开发者
React 对话框组件 Dialog
本文详细介绍了如何在 React 中实现一个功能完备的对话框组件(Dialog),包括基本用法、常见问题及其解决方案,并通过代码案例进行说明。从安装依赖到创建组件、添加样式,再到解决关闭按钮失效、背景点击无效、键盘导航等问题,最后还介绍了如何添加动画效果和处理异步关闭操作。希望本文能帮助你在实际开发中更高效地使用 React 对话框组件。
137 75
|
2天前
|
前端开发 JavaScript UED
React 拖拽排序组件 Draggable List
在现代Web应用中,拖拽排序功能显著提升用户体验。使用React结合`react-dnd`库,可以轻松创建高效且易于维护的拖拽排序组件。通过简单的拖拽操作,用户能直观调整列表项顺序,适用于任务管理、看板工具等场景。实现步骤包括项目初始化、安装依赖、创建基础组件、添加拖拽功能及管理状态和事件。常见问题如拖拽效果不流畅、顺序未更新等可通过性能优化、正确处理索引交换等方式解决。移动端支持也需考虑,确保跨平台的良好体验。
50 25
|
4天前
|
前端开发 JavaScript UED
React 轮播图组件 Carousel
本文介绍了如何在 React 中实现和优化轮播图组件,涵盖自动播放、手动切换、循环播放和响应式设计等核心功能。通过 `useState` 和 `useEffect` 钩子管理状态和副作用,添加左右箭头和指示器增强交互性。同时,探讨了常见问题如自动播放与手动切换冲突、指示器样式不一致、响应式设计及性能优化,并提供解决方案和代码示例。帮助开发者提升轮播图组件的用户体验。
58 26
|
2月前
|
设计模式 前端开发 编译器
与普通组件相比,React 泛型组件有哪些优势?
与普通组件相比,React 泛型组件有哪些优势?
108 63
|
1月前
|
前端开发 Java API
React 进度条组件 ProgressBar 详解
本文介绍了如何在 React 中创建进度条组件,从基础实现到常见问题及解决方案,包括动态更新、状态管理、性能优化、高级动画效果和响应式设计等方面,帮助开发者构建高效且用户体验良好的进度条。
56 18
|
2月前
|
存储 前端开发 测试技术
React组件的最佳实践
React组件的最佳实践