0

我正在尝试自己在我的项目中制作 toast 通知,我快到了,但我现在有一个小问题。我设置了我的通知并让它在点击时消失。但后来我添加了 setTimeout 以在 5 秒后从我的状态中删除 toast,但它没有按我预期的那样工作。当有一个通知时,它应该正常工作,但是当有多个通知时,它会删除所有的 toast,然后带回除最后一个之外的所有内容。我认为我在 removeToast 函数中的 setState 操作存在问题。

一个一个删除可以正常工作。

代码:

const useToastsContainer = createContainer(() => {
    const [toasts, setToasts] = useState<ToastItem[]>([]);

    useEffect(() => {
        console.log(toasts);
    }, [toasts]);

    const removeToast = (id: string) => {
        setToasts(toasts.filter((item) => item.id !== id));
    };

    const createToast = (type: ToastType, content: string) => {
        const id = v4();
        const toast = {
            id,
            type,
            content,
        };
        setToasts([...toasts, toast]);
        setTimeout(() => {
            removeToast(id);
        }, 5000);
    };

    return {
        toasts,
        removeToast,
        createToast,
    };
});

编辑 inspiring-bose-0u1rb

4

0 回答 0