import { useEffect, useState } from "react"; import { createPortal } from "react-dom"; import { type MessageItem, addFn, removeFn } from "./utils"; import styles from "./message.module.less"; function Message() { const [message, setMessage] = useState(); useEffect(() => { const fn = (nextMessage: MessageItem) => { const key = `${Math.ceil(performance.now())}-${Math.round(Math.random() * 100)}`; setMessage({ ...nextMessage, key }); setTimeout(() => { onClose(); }, nextMessage.duration || 5000); }; addFn(fn); return () => { removeFn(fn); }; }, []); const onClose = () => { setMessage(undefined); } return createPortal((
{message && (
{message.content}
)}
), document.body); } export default Message;