zoukankan      html  css  js  c++  java
  • 如何将一个react组件进行静态化调用

    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
  • 相关阅读:
    数学趣题——数字的全排列
    数学趣题——谁在说谎
    数学趣题——移数字游戏
    数学趣题——魔幻方阵
    数学趣题——亲密数
    数学趣题——数字翻译器
    数学趣题——求圆周率的近似值
    数学趣题——完全数
    Linux:CentOS 7 连接ssh方法
    Linux:CentOS 7 服务器之间ssh无密码登录、传输文件
  • 原文地址:https://www.cnblogs.com/94pm/p/11717879.html
Copyright © 2011-2022 走看看