Capítulo 56 de 108
Toast exibe mensagens temporárias e não bloqueantes (confirmação, erro, promessa em andamento) fora do fluxo principal da UI, via um manager imperativo (toast.add) em vez de estado React local.
toast.add(options): dispara um toast; retorna um id usável para fechar (toast.close(id)) depois.type: "success" | "info" | "warning" | "error" | "loading" — renderiza ícone de status automático.actionProps: props de botão (children, onClick) passadas para renderizar uma ação dentro do toast (ex. "Undo").toast.promise(promise, { loading, success, error }): atualiza um único toast conforme a promise resolve/rejeita.<Toaster />: componente que precisa estar montado (geralmente em app/layout.tsx) para os toasts aparecerem.priority: "high": eleva prioridade de exibição de um toast (usado em erros)."use client"
import { Button } from "@/components/ui/button"
import { toast } from "@/components/ui/toast"
export function ToastDemo() {
function showToast() {
const id = toast.add({
title: "Event created",
description: "Sunday, December 3 at 9:00 AM",
actionProps: {
children: "Undo",
onClick() {
toast.close(id)
},
},
})
}
return (
<Button variant="outline" onClick={showToast}>
Show Toast
</Button>
)
}
id retornado.toast.promise(
new Promise<{ name: string }>((resolve) => {
window.setTimeout(() => resolve({ name: "Event" }), 2000)
}),
{
loading: "Creating event…",
success: (data) => `${data.name} created.`,
error: "Could not create event.",
}
)
<Toaster /> no layout: sem ele, toast.add() não renderiza nada visível.toast.promise a criar/fechar toasts à mão para fluxos assíncronos.toast.add/toast.close), não declarativa como a maioria dos outros componentes shadcn.toast.promise é o padrão certo para operações assíncronas com feedback de progresso.type cuida do ícone; não é necessário compor manualmente com Badge ou ícones extras.@base-ui/react e montar <Toaster /> uma única vez na árvore.