useSyncExternalStore 是什么?为什么 Redux/Zustand 等外部状态库需要它?
useSyncExternalStore 是 React 18 官方提供的 Hook,让组件安全订阅外部可变数据源(如 Redux store、浏览器 API、第三方状态库),并在数据变化时正确重渲染,且兼容并发渲染。
const snapshot = useSyncExternalStore(
subscribe, // (cb) => unsubscribe,数据源变化通知 React
() => store.getState(), // 返回当前快照(必须稳定引用,否则死循环)
() => serverState // SSR 用的服务端快照
)为什么需要:
- 自己用
useState + useEffect订阅外部 store 在并发下会出现「撕裂(tearing)」——同一时刻 UI 不同部分显示不同数据 - 它保证读取的快照与渲染一致,并触发正确的重渲染
- Redux 的
useSelector、Zustand 的useStore底层都基于它