首页 > 其他 > 详细

如何将一个react组件进行静态化调用

时间:2019-10-22 09:59:34      阅读:183      评论:0      收藏:0      [点我收藏+]

ant-design的message组件可以使用message.xxx的方法调用,调用代码如下:

import { message, Button } from ‘antd‘;

const info = () => {
  message.info(‘This is a normal message‘);
};

ReactDOM.render(
  <Button type="primary" onClick={info}>
    Display normal message
  </Button>,
  mountNode,
);

message组件支持静态化调用的关键代码如下:

 * 支持静态方法调用:Message.show(message, [type = ‘success‘], [duration = 3], [onClose = null])
 * @class Message
 * @extends {Component}
 */
class Message extends Component {
    static propTypes={
      type: PropTypes.oneOf([‘success‘, ‘warning‘, ‘error‘, ‘info‘]).isRequired, // 消息类型
      message: PropTypes.node, // 消息内容
      onClose: PropTypes.func, // 关闭时的回调
      duration: PropTypes.number // 自动关闭的延时,单位秒。设为 0 时不自动关闭。
    }
    state={open: true}
    static defaultProps={duration: 2}
    handleClose() {
      this.setState({open: false}, () => {
        this.props.onClose && this.props.onClose()
      })
    }
    render() {
      const {message} = this.props
      return (
        <div>{message}</div>
      )
    }
}
// 静态调用方式
Message.show = function successInfo(message, type = ‘success‘, duration = 2, onClose = null) {
  let messageContainer = document.getElementById(‘message-container‘)
  if (!messageContainer) {
    messageContainer = document.createElement(‘div‘)
    messageContainer.id = ‘message-container‘
    document.body.appendChild(messageContainer)
  }
  const reactElement = ReactDOM.createPortal(
    <Message type={type} message={message} duration={duration} onClose={onClose} />,
    document.body,
    +new Date()
  )
  ReactDOM.render(reactElement, messageContainer)
}
export default Message

 

如何将一个react组件进行静态化调用

原文:https://www.cnblogs.com/94pm/p/11717879.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!