• react EUI 《消息通知》组件封装


    如题基于EUI封装个《消息通知》组件

    需求,一次调用全项目能用如果按原来的EUI组件,

    每个页面想调用消息通知组件EuiGlobalToastList就得调用DOM跟方法,

    比较麻烦现在需要封装成一句话调用马上能用比如:

    message.success("操作成功", 2000, "内容文字");

    message.warning("警告!");

    message.danger("操作失败");

    message.primary("普通消息");

    以下简单说说怎么实现

    先封装组件命名为WFToast(名字随意)

    import React, { useState, forwardRef, useImperativeHandle } from 'react'
    import { generateId } from '../../utils'
    import { EuiGlobalToastList } from '@elastic/eui'
    
    const WFMessage = (props, ref) => {
      const [toasts, setToasts] = useState([]);
    
      const addToast = (title, time = 2000, type = "", text = "") => {
        let iconType = "";
        let color = "";
        switch(type){
          case "warning":
            iconType = "help";
            color = "warning";
            break;
          case "danger":
            iconType = "alert";
            color = "danger";
            break;
          case "primary":
            iconType = "bell";
            color = "primary";
            break;  
          default:
            iconType = "check";
            color = "success";
        };
    
        setToasts([...toasts, {
          id: `toast_${generateId()}`,
          title: title,
          text,
          toastLifeTimeMs: time,
          iconType, // 图标: check 成功, help 警告, alert 危险(更多图标可参考EUI图标库)
          color // 类型: success, warning, danger, primary
        }]);
      }
    
      const removeToast = (removedToast) => {
        setToasts(toasts.filter((toast) => toast.id !== removedToast.id))
      }
      useImperativeHandle(ref, () => ({addToast}));
      return (
        <EuiGlobalToastList
          toasts={toasts}
          dismissToast={removeToast}
          toastLifeTimeMs={2000}
        />
      )
    }
    export default forwardRef(WFMessage);

    在跟目录的index.js路由插入组件WFToast,要注意必须先用函数组件Message再包一层,因为WFToast组件需要用ref调用内部方法addToast(这部分涉及到hook)

     饿死了,先发部分吧,明天有空再偷偷发剩下的。。。

  • 相关阅读:
    嘿,新年快乐
    最近无状态~
    奥巴马:我们为什么要上学
    大学学不会逃课是不会有出息的!
    赫赫,给红十字捐款的sb了吧
    狄仁杰你敢不装逼吗
    腾讯qq开始耍威胁用户的无赖手段了
    <转>关于信仰
    恩,老了~~~
    Vue 2.0学习笔记: Vue中的computed属性
  • 原文地址:https://www.cnblogs.com/konghaowei/p/13995794.html
Copyright © 2020-2023  润新知