概览`useSyncExternalStore` 提供 React 并发安全的外部数据订阅机制,避免在并发模式下出现撕裂更新与不一致渲染,适用于事件与全局状态同步场景。轻量 storetype Listener = () => void class Store { private value = 0 private listeners: Set<Listener> = new Set() getSnapshot() { return this.value } subscribe(fn: Listener) { this.listeners.add(fn); return () => this.listeners.delete(fn) } set(v: number) { this.value = v; this.listeners.forEach((l) => l()) } } export const store = new Store() React 组件订阅'use client' import { useSyncExternalStore } from 'react' import { store } from './store' export default function Counter() { const snap = useSyncExternalStore(store.subscribe.bind(store), store.getSnapshot.bind(store)) return ( <div> <p>值:{snap}</p> <button onClick={() => store.set(snap + 1)}>加一</button> </div> ) } 治理要点`getSnapshot` 必须是无副作用且快速;订阅与取消应健壮。对复杂对象提供不可变快照或版本号,避免比较与渲染异常。与并发特性(如 `useTransition`)协作,确保交互与订阅更新有序。验证与指标React:19.0+;Next.js:15.0+并发场景下订阅一致、无撕裂;事件驱动页面更新稳定

发表评论 取消回复