
[React Component] 15줄의 코드를 2줄로: useSyncExternalStore로 설계하는 Toast 시스템
프론트엔드 개발자라면 누구나 한 번쯤 만들어보는 Toast UI.
하지만 막상 구현하다 보면 "이걸 앱 어디서든 어떻게 띄우지?", "Context Provider로 꼭 감싸야 하나?" 같은 고민에 빠지게 됩니다.
📉 Before: 15줄의 상태 관리 지옥
기존에는 컴포넌트마다 useState, useEffect를 선언하고, 타이머를 관리하고, Props로 상태를 내려주는 복잡한 과정을 거쳐야
했습니다.
🚀 After: 단 2줄로 끝나는 혁신
Mantine의 내부 구현을 분석하여 얻은 인사이트를 바탕으로, useSyncExternalStore를 활용한 새로운 아키텍처를 소개합니다.
Zero State: 컴포넌트 내부에서 상태 관리 코드를 완전히 제거했습니다.
Global Access: 앱 어디서든, 어떤 깊이에서든 toasts.show() 한 줄이면 충분합니다.
Type Safe: 타입스크립트로 설계되어 컴파일 타임에 오류를 방지합니다.
🏗️ 3-Layer 아키텍처의 힘
단순히 Toast를 만드는 것을 넘어, Store - Business - UI 계층을 분리하여 유지보수성과 확장성을 극대화한 설계 패턴을
공유합니다. 이 패턴은 모달, 알림 센터 등 전역 상태가 필요한 모든 곳에 적용 가능합니다.
React 18의 기능을 100% 활용한 우아한 설계를 경험하고 싶다면?
👉 [전체 읽기: 15줄에서 2줄로: useSyncExternalStore 기반 React Toast 시스템 설계법]
🔗 https://blog.sangwook.dev/posts/react-component-toast (https://blog.sangwook.dev/posts/react-component-toast)
단순히 상태를 전역에서 관리하는 게 아니라, 실제 UI 상황을 고려해 큐잉과 TTL 관리까지 포함된 점 잘 보았습니다!
사내에서 전역 모달 시스템을 설계해보았던 경험이 있는데, useSyncExternalStore 기반의 useStore 브릿지 추상화로 React 의존도를 최소한 부분은 낯설지만 좋은 방식이라 고려해볼 것 같아요~
useSyncExternalStore라는 내용을 처음 알게되었는데 토스트 말고도 다른 곳에도 적절하게 사용할 수 있을 것 같다는 생각이 듭니다! 좋은 글 잘 읽었습니다~b
좋은 글 감사합니다~