Why useSyncExternalStore Is Not Used in Jotai
Daishi Kato's blog
상태 관리 라이브러리인 Zustand, Jotai, Valtio의 저자가 쓴 글 중 흥미로운 글이 있어 소개드립니다. 이 글에서는 React 18에서 제공하는 useSyncExternalStore
를 왜 Jotai가 사용하지 않았는지에 대해서 자세히 설명하고 있습니다.
결론적으로, Jotai는 React의 동시 렌더링(Concurrent Rendering) 기능과 최대한 매끄럽게 호환되도록 하기 위해 useSyncExternalStore
대신 useState
를 모델로 한 자체적인 Atom 기반 상태 관리 방식을 채택했습니다.
반면, useSyncExternalStore
를 사용하는 Zustand의 경우, 동시 렌더링(ex: useTransition
)을 사용할 때 UI 이슈(예: isPending
대신 Suspense
의 fallback UI가 표시됨)가 존재합니다.
이는 Zustand가 React 컴포넌트와는 별개로 독립된 스토어로 동작하도록 설계되었기 때문에, 완벽한 동시 렌더링 연동이 어렵기 때문입니다. 외부 스토어로 설계된 특성 상 어느 정도의 임시적인 UI 불일치(temporary tearing) 가능성은 감안하는 것입니다. (역시 은총알은 없네요)
결국, Zustand는 외부 스토어 접근 방식을 그대로 유지하는 대신 약간의 동시 렌더링 이슈를 감수하는 편이고, Jotai는 React 내부 상태(useState
) 모델을 따르면서 useTransition
같은 동시 렌더링 기능을 더욱 안정적으로 지원하는 쪽을 택했다는 점이 핵심입니다. (서로가 trade-off인 관계)
자세한 내용은 원문 블로그를 확인해 보세요.
https://blog.axlight.com/posts/why-use-sync-external-store-is-not-used-in-jotai/
다음 내용이 궁금하다면?
이미 회원이신가요?
2025년 1월 21일 오전 9:04
두 가지 목표가 있다. 어떤 목표가 학습 동기를 높인다고 생각하는가?
... 더 보기안
... 더 보기프로덕트 매니저(PM)로 일하면서 늘 지표 이야기를 듣게 됩니다. 대부분 PM은 선행지표(leading indicator)와 후행지표(lagging indicator)의 개념을 잘 이해하고 있습니다. 하지만 선행지표에 영향을 미치는 '인풋(input) 지표, '아웃풋(o
... 더 보기