React & MUI 封装 Alert 消息组件 (ts)

324 阅读1分钟

action.tsx

import { createRoot } from "react-dom/client";
import Message from "./index";

const dom: HTMLDivElement = document.createElement("div");
const message = {
  success: (text: string, time: number) => {
    const JSXdom: JSX.Element = (
      <Message content={text} duration={time} type="success"></Message>
    );
    createRoot(dom).render(JSXdom);
    document.body.appendChild(dom);
  },
  info: (text: string, time: number) => {
    const JSXdom: JSX.Element = (
      <Message content={text} duration={time} type="info"></Message>
    );
    createRoot(dom).render(JSXdom);
    document.body.appendChild(dom);
  },
  error: (text: string, time: number) => {
    const JSXdom: JSX.Element = (
      <Message content={text} duration={time} type="error"></Message>
    );
    createRoot(dom).render(JSXdom);
    document.body.appendChild(dom);
  },
  warning: (text: string, time: number) => {
    const JSXdom: JSX.Element = (
      <Message content={text} duration={time} type="warning"></Message>
    );
    createRoot(dom).render(JSXdom);
    document.body.appendChild(dom);
  },
};

export default message;

index.tsx

import { useState } from "react";
import { Snackbar, Alert } from "@mui/material";
interface PropsType {
  content: string;
  duration: number;
  type: AlertColor;
}
type AlertColor = "success" | "info" | "warning" | "error";

const Message = (props: PropsType) => {
  const { content, duration, type } = { ...props };
  const [open, setOpen] = useState(true);
  const handleClose = () => {
    setOpen(false);
  };
  return (
    <Snackbar
      open={open}
      autoHideDuration={duration}
      anchorOrigin={{ vertical: "top", horizontal: "center" }}
      onClose={handleClose}
    >
      <Alert severity={type} variant="standard">
        {content}
      </Alert>
    </Snackbar>
  );
};

export default Message;

详细可参考:juejin.cn/post/714454…

欢迎指出问题! ---小趴菜的react记录---