告别服务端渲染卡顿!useSyncExternalStore 优化水合作用全解析

You may be looking for a useSyncExternalStore | Swizec Teller

使用 useEffect 订阅事件然后修改 state,返回 state,在客户端这做是可以的,如果使用服务端渲染就会传卡顿现象,解决方案使用 useSyncExternalStore

js 复制代码
function useSomeValue() {
  const [value, setValue] = useState(0)

  useEffect(() => {
    const eventSource = getEventSource()
    eventSource.subscribe((val) => setValue(val))

    return () => {
      eventSource.unsubscribe()
    }
  }, [])

  return value
}

上面的 gif 中看到的是一个缓慢的水合作用过程。

  • 在服务器上渲染组件
  • 无法订阅浏览器事件
  • HTML 出现在浏览器中
  • 水合作用
  • 展示运行效果
  • 订阅浏览器事件
  • 更新状态
  • 并渲染了组件
js 复制代码
const eventSource = getEventSource()

function subscribe(callback) {
  eventSource.onChange(callback)
  return () => {
    eventSource.unsubscribe(callback)
  }
}

function useSomeValue() {
  const value = useSyncExternalStore(
    subscribe,
    () => eventSource.currentValue(),
    () => defaultValue
  )

  return value
}
相关推荐
sjin3 小时前
React源码 - 关键数据结构
前端·react.js
IT小哥哥呀4 小时前
论文见解:REACT:在语言模型中协同推理和行动
前端·人工智能·react.js·语言模型
古茗前端团队4 小时前
小程序 Galacean Effect实践
react.js
JamSlade5 小时前
react 无限画布难点和实现
前端·react.js
Cxiaomu5 小时前
React Native 项目中 WebSocket 的完整实现方案
websocket·react native·react.js
im_AMBER5 小时前
React 02
前端·笔记·学习·react.js·前端框架
鹏多多6 小时前
React动画方案对比:CSS动画和Framer Motion和React Spring
前端·javascript·react.js
liangshanbo121512 小时前
写好 React useEffect 的终极指南
前端·javascript·react.js
浪裡遊17 小时前
Nivo图表库全面指南:配置与用法详解
前端·javascript·react.js·node.js·php