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组件进行静态化调用的更多相关文章

  1. JAVA常用设计模式(静态化调用和实例化调用的区别,编辑可见 )

    用newInstance()与用new是区别的,区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类,且newInstance()只能调用无参构造函数. 最大的区别在于内存.静态方法 ...

  2. react组件中的类调用construcor、super方法你知道多少?

    constructor:在类中作为一个钩子函数,有constructor钩子函数的时候,可以定义state,如果用户不定义state的话,有无constructor钩子函数没啥区别: super:

  3. React组件和生命周期简介

        React 简介----React 是 Facebook 出品的一套颠覆式的前端开发类库.为什么说它是颠覆式的呢? 内存维护虚拟 DOM 对于传统的 DOM 维护,我们的步骤可能是:1.初始化 ...

  4. 帝国cms文章内容tags关键词设置调用方法以及tags静态化

    说实话帝国cms用起来真的不好找一些功能,就比如说帝国cms的tag标签调用.需要注意的是帝国CMS文章的关键词和tags标签并非一码事,关键词标签是设置文章的关键词的,是用来给搜索引擎说明本篇文章的 ...

  5. React组件化开发

    环境搭建: 1.安装node.js 2.安装cnpm  # npm install -g cnpm --registry=https://registry.npm.taobao.org 3.全局安装c ...

  6. 从性能角度看react组件拆分的重要性

    React是一个UI层面的库,它采用虚拟DOM技术减少Javascript与真正DOM的交互,提升了前端性能:采用单向数据流机制,父组件通过props将数据传递给子组件,这样让数据流向一目了然.一旦组 ...

  7. 从工程化角度讨论如何快速构建可靠React组件

    前言 React 的开发也已经有2年时间了,先从QQ的家校群,转成做互动直播,主要是花样直播这一块.切换过来的时候,业务非常繁忙,接手过来的业务比较凌乱,也没有任何组件复用可言. 为了提高开发效率,去 ...

  8. 设计 react 组件

    重新设计 React 组件库 诚身 7 个月前   在 react + redux 已经成为大部分前端项目底层架构的今天, 让我们再次回到软件工程界一个永恒问题的探讨上来, 那就是如何提升一个开发团队 ...

  9. 如何快速构建React组件库

    前言 俗话说:"麻雀虽小,五脏俱全",搭建一个组件库,知之非难,行之不易,涉及到的技术方方面面,犹如海面风平浪静,实则暗礁险滩,处处惊险- 目前团队内已经有较为成熟的 Vue 技术 ...

随机推荐

  1. gradle/gradle plugin/Android studio关系

    gradle - 构建工具,存储于Users/stono/.gradle/wrapper/dists Adroid Studio- IDE Gradle plugin - 在AS中使用Gradle的插 ...

  2. centos7安装python3.7.4和pip3

    亲测有效,针对 阿里云 centos 7 轻量服务器 python ==> 3.7.4 pip ==>  3 一,打开python官网,找到下载Python的tgz文件,有两种方式下载 ( ...

  3. 搭建基于 Anaconda 管理的多用户 JupyterHub 平台

    搭建基于 Anaconda 管理的多用户 JupyterHub 平台 情况:计算工作站放在实验室,多个同学需要接入使用,且需要各自独立的环境,并使用 Jupyter notebook 平台以方便协作. ...

  4. jdk 6-13最有价值新特性总结

    355: Text Blocks (Preview) JDK 13的特性.简化了大段文本的换行,例如sql或xml段. Shenandoah GC. jdk 12作为实验特性引入. JEP330-启动 ...

  5. CRM 负责人 选择

    CRM 负责人 参与 - 搜狗搜索https://www.sogou.com/sgo?query=CRM+%E8%B4%9F%E8%B4%A3%E4%BA%BA+%E5%8F%82%E4%B8%8E& ...

  6. java.lang.Exception: No tests found matching

    java.lang.Exception: No tests found matching 需要导入junit.jar 和 hamcrest.jar

  7. HDFS API 测试用例

    增加依赖 <!--hadoop--> <dependency> <groupId>org.apache.hadoop</groupId> <art ...

  8. exe4j 打包jar包程序,inno setup complier打包所有

    关于库: jar包中对于引用第三方库的话,需要再exe4j中引用. rxtx http://rxtx.qbang.org/wiki/index.php/Download

  9. Python 工匠:使用数字与字符串的技巧学习笔记

    #Python 工匠:使用数字与字符串的技巧学习笔记#https://github.com/piglei/one-python-craftsman/blob/master/zh_CN/3-tips-o ...

  10. nginx http和https共存

    server { listen 80 default backlog=2048; listen 443 ssl; server_name linuxyan.com; root /var/www/htm ...