useSyncExternalStore 是什么?为什么 Redux/Zustand 等外部状态库需要它?

useSyncExternalStore 是 React 18 官方提供的 Hook,让组件安全订阅外部可变数据源(如 Redux store、浏览器 API、第三方状态库),并在数据变化时正确重渲染,且兼容并发渲染。

const snapshot = useSyncExternalStore(
  subscribe,          // (cb) => unsubscribe,数据源变化通知 React
  () => store.getState(),  // 返回当前快照(必须稳定引用,否则死循环)
  () => serverState   // SSR 用的服务端快照
)

为什么需要:

  1. 自己用 useState + useEffect 订阅外部 store 在并发下会出现「撕裂(tearing)」——同一时刻 UI 不同部分显示不同数据
  2. 它保证读取的快照与渲染一致,并触发正确的重渲染
  3. Redux 的 useSelector、Zustand 的 useStore 底层都基于它

同分类其他题目