近期项目在使用Material-UI ,Material-UI 的消息提示组件是<Alert />,<Alert />没有主动提示的能力,属于被动组件,需要在页面中嵌入,然后通过属性open的true/false进行控制,在寻常的页面开发中使用到无大碍,但是不能运用到工具类的js中,如独立封装的axios;axios的独立分装意外要脱离页面,统一封装,拦截过滤。这个时候<Alert />就显得无能为力了,只能另行封装。

这里没有重新封装一个新的组件,而是使用Material-UI组件库中的Alert、Snackbar组合封装组件。

Snackbar API(只介绍需要用到的):

open: Boolean类型 true/false,控制消息框关闭

autoHideDuration:Number,控制显示时间

anchorOrigin: Object, 控制消息体显示位置

onClose: 主动关闭事件

Alert

ref 则会被传递到根元素中。

variant 'filled'
| 'outlined'
| 'standard'
| string
severity 'error'
| 'info'
| 'success'
| 'warning'

React.forwardRef: 引用传递(Ref forwading)是一种通过组件向子组件自动传递 引用ref 的技术。对于应用者的大多数组件来说没什么作用。但是对于有些重复使用的组件,可能有用

第一步:封装一个Message

function Message(props) {const { content, duration, type } = {...props};// 开关控制:默认true,调用时会直接打开const [open, setOpen] = React.useState(true);// 关闭消息提示const handleClose = (event, reason) => {setOpen(false);};return <Snackbaropen={open}autoHideDuration={duration}anchorOrigin={{ vertical: 'top', horizontal: 'center' }}onClose={handleClose}><Alert severity={type}>{content}</Alert></Snackbar>
}

第二部: 引用Message,并定义message的主动事件

const message = {dom: null,success({content, duration}) {// 创建一个domthis.dom = document.createElement('div');// 定义组件, const JSXdom = (<Message content={content} duration={duration} type='success'></Message>);// 渲染DOMReactDOM.render(JSXdom,this.dom)// 置入到body节点下document.body.appendChild(this.dom);},error({content, duration}) {this.dom = document.createElement('div');const JSXdom = (<Message content={content} duration={duration} type='error'></Message>);ReactDOM.render(JSXdom,this.dom)document.body.appendChild(this.dom);},warning({content, duration}) {this.dom = document.createElement('div');const JSXdom = (<Message content={content} duration={duration} type='warning'></Message>);ReactDOM.render(JSXdom,this.dom)document.body.appendChild(this.dom);},info({content, duration}) {this.dom = document.createElement('div');const JSXdom = (<Message content={content} duration={duration} type='warning'></Message>);ReactDOM.render(JSXdom,this.dom)document.body.appendChild(this.dom);}
};export default message;

从上述代码看思路很简单:第一步先决定提示消息的样式,有现成的用现成的组件组合;第二部,研究参数,把参数预置好,这里一些不会变化的参数值写死,变化的参数动态通过父组件传入即可;第三步,就是封装能力,根据不同的提示传入不同的参数,达到效果

引用如下:

if (status === 426 || status === 428 || status === 403) {message.error({content: response.data.msg,  duration: 2000})
}
if (status === 200) {message.success({content: i18n.t('message.loaded'),  duration: 1500})
}if (status === 404) {message.error({content: i18n.t('message.http404'),  duration: 1500})return null
}

React 如何封装消息提示组件message--Material-UI相关推荐

  1. ElementUI 消息提示组件Message

    目录 官方地址 应用场景 基本用法 通知类型 偏移量 使用HTML代码片段 开启关闭按钮 文字内容居中 自定义图标iconClass onClose close实例方法 全局引入 单独引用 Optio ...

  2. Message消息提示组件的原理

    Message消息提示是这样的页面提示 如果你在使用Vue那可能会使用element-ui中消息提示,如果你在使用React,那么可能会使用ant-design的消息提示.他们的原理都相似,这篇文章将 ...

  3. 最好用的 6 款 Vue 实时消息提示通知(Message/Notification)组件推荐与测评

    本文完整版:<最好用的 6 款 Vue 实时消息提示通知(Message/Notification)组件推荐与测评> Vue 实时消息提示通知 Vue-notification - 专注实 ...

  4. Tooltip是一个消息提示组件

    Tooltip是一个消息提示组件,当用户点击或者长按时显示提示,在屏幕阅读器能够使它语音化,这有助于视力障碍人士阅读,用法如下: Tooltip(message: '这是提示',child: Icon ...

  5. ymPrompt.js消息提示组件

    详细说明: http://www.ajaxbbs.net/test/ymPrompt4.0/demo.html 1.在页面中引入ymPrompt.js.如:<script type=" ...

  6. 纯js消息弹窗组件Message

    js消息弹窗组件 文章目录 js消息弹窗组件 1. js部分代码 2.使用方法 3.演示效果 写组件上瘾,今天写一个纯js消息弹窗组件,复制即可使用,css也写在了js之中,用js生成,代码若是存在不 ...

  7. 一款优雅的消息提示插件Message.js

    Message.js 插件描述: 一款优雅的原生JS页面消息提示插件,兼容性良好,无任何依赖. Git: Gitee | GitHub 插件预览:Message.js 声明: 此插件非笔者原创,笔者只 ...

  8. 微信小程序—封装消息提示框wx.showToast()方法

    封装showToast方法: /*** 消息提示框* @param {*} msg 提示的内容* @param {*} status 图标*/ function showToast(msg, stat ...

  9. Android消息提示框及CheckBox组件

    目录 一.Toast(消息提示框) 1.创建显示普通文本的Toast 2.创建显示带图片的Toast 二.CheckBox组件 1.在CheckBox在XML文件中的基本语法 2.CheckBox 选 ...

最新文章

  1. SDN 网络技术创新探索 | 移动云 TeaTalk 线上直播 倒计时启动中
  2. 计算机组成原理DMA方式原理,计算机组成原理4(程序查询方式、程序中断方式、DMA方式及其I/O接口电路)...
  3. golang数据运算符
  4. 016_循环变量内建函数
  5. UA MATH567 高维统计II 随机向量10 Grothendieck不等式的证明 版本二:kernel trick
  6. Android --- AndroidManifest.xml文件内容详细介绍
  7. Groovy预览--文本处理
  8. Spring-Cloud中的 熔断、限流、降级
  9. 控制台当前行显示进度条,不换行
  10. leetcode106. 从中序与后序遍历序列构造二叉树(dfs)
  11. JBox2D学习 - 小球碰撞实例 .
  12. 通过这本拼图学习Bash
  13. Ubuntu中出现“Could not get lock /var/lib/dpkg/lock”的解决方法
  14. Atitit mq读取队列信息 范例 目录 1.1. 读取原理与主要流程 1 1.2. 范例项目 C:\0wkspc\MqDemoPrj 1 1.3. 范例代码 1 1.1.读取原理与主要流程
  15. 高等数学第七版下册 同济大学数学系 编 课后答案 习题解析
  16. vibe的matlab实现,Matlab調用VIBE算法
  17. Pr 电影中常见的回忆效果
  18. 《遥感原理与应用》总结—遥感概论
  19. 机器学习——随机森林算法及原理
  20. 程序设计入门——C语言 翁恺 第一次单元测试

热门文章

  1. 大学物理--光的衍射
  2. IM消息重试机制Java实现_IM群聊消息的已读回执功能该怎么实现?
  3. 软考高级信息系统项目管理师,高项读书系列笔记——1招标分类
  4. 谁在围捕免费wifi?
  5. ES6-Promise 原理分析
  6. java根据指定的日期获取前七天
  7. ffmpeg 中 -f <format> 字段的意义
  8. 高考电子计算机改卷,高考电子阅卷潜规则,看看你的卷子在电脑中成什么样?...
  9. CSharp(C#)语言_第五章(类和继承)
  10. 玩美移动达成合并协议:拟纳斯达克上市 CCV是股东