Toast

잠깐 떴다 사라지는 알림이다. 사용자의 행동을 요구하지 않는다. 결정을 요구한다면 Confirm 을 쓴다.

import { Toast, ToastHost, useToast } from "@nui-kit/react";
// 서브패스로 좁힐 때
import { Toast } from "@nui-kit/react/toast";
import "@nui-kit/react/styles/toast.css";   // 온디맨드일 때
// app/layout.tsx 를 ToastHost 로 감싼 뒤
const toast = useToast();
toast.open({ message: "저장되었습니다." });

기본

toast.open({ message: "저장되었습니다." });

기본 지속시간 2400ms

지속시간

toast.open({ message: "저장 실패", tone: "error", duration: 0 });

duration — 0 이하면 자동으로 닫히지 않는다

여러 개 쌓기

토스트는 스택으로 쌓이고 아래에서 위로 정렬된다. closeAll() 로 한 번에 닫을 수 있다.

// ToastHost 를 앱 최상단에 한 번 놓는다
<ToastHost>{children}</ToastHost>

스택 동작

접근성

토스트는 포커스를 가져가지 않는다. 반드시 읽혀야 하는 내용이라면 토스트 대신 Alert 을 쓴다 — 사라져 버리면 놓친다.

커스터마이징

색은 컴포넌트별로 열지 않는다. 배경만 바꾸면 글자가 따라오지 않아 대비가 깨진다. className 으로 배경과 글자를 함께 지정한다.

Toast 는 border 를 쓰지 않으므로 두께 변수도 없다 — 안 쓰는 변수는 죽은 토큰이 된다.

컴포넌트변수기본값비고
Toast--nui-toast--radiusvar(--nui-radius-2)
--nui-toast--widthmin(100%, 26.25rem)

API

이름타입기본값설명
message *ReactNode
open *boolean
classNamestring
durationnumber자동으로 닫히기까지의 시간(ms). 0 이하면 자동으로 닫히지 않는다
onExited() => void
onOpenComplete() => void
onRequestClose() => void
toneToastTone

ToastProps 에서 자동 생성됨 (components/Toast/Toast.types.ts).