这样使用React弹窗会更方便 -- use-modal

主流modal大多须要在组件内使用state控制是否显示,在多个地方调用的时候很不方便,因此基于 context 提供一个更加易用的调用方式。html

use-modal 支持主流的modal, 理论上只要modal经过相似于 show props 控制显示的,就能够支持,例如:react

源码地址: github.com/wowlusitong…git

特色

  • 简单易用
  • 支持react hooks
  • 0依赖

安装

使用yarngithub

$ yarn add react-use-modal
复制代码

或者用npmnpm

$ npm install react-use-modal --save
复制代码

使用

ModalProvider 放在组件外层bootstrap

import ReactDOM from 'react-dom';
import { ModalProvider } from 'react-use-modal';

ReactDOM.render(
  <ModalProvider> ... </ModalProvider>,
  document.querySelector('#root')
)
复制代码

调用方式,以react-bootstrap举例api

使用contextbash

import React from 'react';

import { Modal } from 'react-bootstrap';
import { ModalContext } from 'react-use-modal';

export default class App extends React.Component {

  handleClick = () => {
    const {showModal, closeModal} = this.context;
    showModal(({ show }) => (
      <Modal show={show} onHide={closeModal}> <Modal.Body>body</Modal.Body> </Modal> )) } render() { return ( <button onClick={this.handleClick}>click</button> ) } } Product.contextType = ModalContext 复制代码

使用hooksantd

import React from 'react';
import { Modal } from 'react-bootstrap';
import { useModal } from 'react-use-modal';

const App = () => {
  const { showModal, closeModal } = useModal();

  function handleClick() {
    showModal(({ show }) => (
      <Modal show={show} onHide={closeModal}>
        <Modal.Header closeButton>
          <Modal.Title>Modal title</Modal.Title>
        </Modal.Header>
        <Modal.Body>Modal body text goes here.</Modal.Body>
      </Modal>
    ))
  }

  return (
    <button onClick={handleClick}>modal</button>
  )
}
复制代码

API

showModal

显示modal,将 show 设置为truedom

参数

component(?Function): 第一次调用必须传递参数,再次调用可忽略

showModal(props => (
  <Modal show={show} onHide={closeModal}> <Modal.Body>body</Modal.Body> </Modal> )) 复制代码

组件props

Name Type Default Description
show boolean false 是否显示modal

closeModal

关闭modal,将 show 设置为false

相关文章
相关标签/搜索