Skip to content

撕裂问题

产生原因:

从React18开始引入了并发渲染机制,渲染不再是一次原子化的操作,可以被中断、恢复和丢弃; 产生“撕裂”就是指,视图UI上呈现一种不可能出现的情况:同一个状态,一部分是旧值一部分是新值;

触发原因:

一般你直接访问外部数据就会触发

js
// 外部状态源
const store = { count: 0 }

function Component() {
  // 直接访问外部状态 - 危险!
  return (
    <div>
      <h1>Count: {store.count}</h1>
      <p>Double: {store.count * 2}</p>
    </div>
  )
}

如何避免撕裂?

使用useSyncExternalStore, 他可以确保在整个渲染流程使用同一个状态快照,从而避免撕裂; 如果渲染中状态变化,会触发新的渲染;

本站访客数 人次 本站总访问量