主流modal大多须要在组件内使用state控制是否显示,在多个地方调用的时候很不方便,因此基于 context 提供一个更加易用的调用方式。html
use-modal
支持主流的modal, 理论上只要modal经过相似于 show props
控制显示的,就能够支持,例如:react
源码地址: github.com/wowlusitong…git
使用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>
)
}
复制代码
显示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 |
关闭modal,将 show
设置为false