Getting Started
Runtime Setup
DialogRuntime과 Toaster를 앱 루트에 mount해 dialog와 toast runtime을 연결하는 방법을 안내합니다.
import { DialogRuntime } from '@woon-ui/dialog'
import { Toaster } from '@woon-ui/toast'개요
Runtime Setup은 명령형 API를 실제 React 트리에 연결하는 단계입니다. Woon은 더 이상 provider나 plugin을 요구하지 않고, 필요한 runtime만 앱 루트에 직접 mount합니다.
useDialog(),alert(),confirm()에는DialogRuntimetoast()에는Toaster- 둘은 독립적이므로 사용하는 쪽만 mount
상세 API는 각 기능 문서에서 확인하세요.
Dialog Runtime
Dialog 계열 API를 쓴다면 앱 루트에 DialogRuntime을 한 번 배치합니다.
import { DialogRuntime } from '@woon-ui/dialog'
export function AppRoot() {
return (
<>
<App />
<DialogRuntime />
</>
)
}DialogRuntime은 dialog runtime mount이며 zIndex, scrollTarget, components 같은 앱 전역 기본값을 정의할 수 있습니다.
Toast Runtime
Toast를 쓴다면 앱 루트에 Toaster를 한 번 배치합니다.
import { Toaster } from '@woon-ui/toast'
import { Toast } from '@/woon/ui/toast' // or your configured ui path
export function AppRoot() {
return (
<>
<App />
<Toaster position="bottom-right" render={Toast} />
</>
)
}CLI로 생성한 local Toast wrapper를 쓰고 있다면 render={Toast}를 함께 넘기면 됩니다.
Toaster는 toast runtime mount이며 position, maxVisible, zIndex, render로 기본 동작과 UI를 제어합니다.
함께 설정하기
Dialog와 Toast를 같이 쓴다면 둘을 나란히 두면 됩니다.
import { DialogRuntime } from '@woon-ui/dialog'
import { Toaster } from '@woon-ui/toast'
import { Toast } from '@/woon/ui/toast'
export function AppRoot() {
return (
<>
<App />
<DialogRuntime />
<Toaster position="bottom-right" render={Toast} />
</>
)
}어디에 둘까
보통은 앱 루트의 마지막에 두는 것이 가장 단순합니다.
기존에 Providers 같은 래퍼 컴포넌트를 두고 있다면 그 안에 배치해도 괜찮지만, Woon 전용 provider를 만들 필요는 없습니다.
import { DialogRuntime } from '@woon-ui/dialog'
import { Toaster } from '@woon-ui/toast'
import { Toast } from '@/woon/ui/toast'
export function Providers({ children }: { children: React.ReactNode }) {
return (
<>
{children}
<DialogRuntime />
<Toaster position="bottom-right" render={Toast} />
</>
)
}핵심은 “전역에서 한 번만 mount”라는 점입니다.
Migration
이전:
import { WoonProvider, dialogPlugin, toastPlugin } from '@woon-ui/react'
export function AppRoot() {
return (
<WoonProvider plugins={[dialogPlugin(), toastPlugin()]}>
<App />
</WoonProvider>
)
}이후:
import { DialogRuntime } from '@woon-ui/dialog'
import { Toaster } from '@woon-ui/toast'
import { Toast } from '@/woon/ui/toast'
export function AppRoot() {
return (
<>
<App />
<DialogRuntime />
<Toaster position="bottom-right" render={Toast} />
</>
)
}권장 import도 기능별 패키지 기준으로 맞추면 문서와 예제가 그대로 맞아떨어집니다.
ModalRoot를 이미 사용 중이었다면 이름만 DialogRuntime으로 바꾸면 됩니다.