react useDeferredvalue和useTransition的实现

 更新时间:2026年06月18日 10:15:28   作者:英俊潇洒美少年  
本文主要介绍了react useDeferredvalue和useTransition的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

我给你用最简单、最直白、面试必过、一看就懂的方式,彻底讲透 React 的 useDeferredValue + useTransition

一句话核心结论

这两个 React 18 新 Hook,专门解决:
大量数据渲染、复杂计算 → 导致页面卡顿、输入框延迟 的问题!

它们的作用:
让高优先级操作(输入、点击)不卡顿,低优先级操作(大数据渲染、复杂计算)延后执行。

先看场景(你一定遇到过)

const [text, setText] = useState('')
const list = filterBigList(text) // 超级耗性能,2万条数据

return (
  <>
    <input value={text} onChange={(e) => setText(e.target.value)} />
    <div>{list.map(item => <div>{item}</div>)}</div>
  </>
)

问题:
输入框打字 → 触发大数据过滤 → 页面卡死、延迟、掉帧

原因:
输入和渲染是同步高优先级,一起执行,UI 被阻塞。

一、useTransition(最常用)

作用

把 非紧急、耗性能的更新 标记为 低优先级更新
高优先级(输入)可以插队,页面永远不卡!

核心 API

const [isPending, startTransition] = useTransition()
  • isPending:低优先级任务是否在等待(可展示 loading)
  • startTransition:把里面的更新降级为低优先级

代码演示(立刻不卡)

const [text, setText] = useState('')
const [list, setList] = useState([])

const [isPending, startTransition] = useTransition()

const onChange = (e) => {
  // 1. 高优先级:立即更新输入框
  setText(e.target.value)

  // 2. 低优先级:延迟执行大数据渲染
  startTransition(() => {
    setList(filterBigList(e.target.value))
  })
}

效果

输入框永远流畅!
大数据列表延迟一点点,完全不影响体验

二、useDeferredValue

作用

延迟一个值,等主线程空闲了,再更新这个值
适合:值来自父组件、无法用 startTransition 包裹

核心 API

const deferredValue = useDeferredValue(value)

代码演示

const [text, setText] = useState('')

// 让 text 延迟更新
const deferredText = useDeferredValue(text)

// 只有 deferredText 变了才执行耗性能操作
const list = useMemo(() => {
  return filterBigList(deferredText)
}, [deferredText])

效果

和 useTransition 一模一样!
输入流畅,大数据延迟渲染

三、两者区别(超级好记)

方式用法适用场景
useTransition包裹 setState自己控制更新的地方
useDeferredValue包裹一个值子组件、无法控制 setState

一句话区分:

  • 控制更新函数 → useTransition
  • 控制一个值 → useDeferredValue

四、底层原理(面试必问)

React 18 并发渲染 能力:

  1. 把更新分为 高优先级 / 低优先级
  2. 高优先级(输入、点击)可中断低优先级
  3. 低优先级渲染会被暂停、插队、恢复
  4. 保证 UI 永远流畅

五、超级总结(背这个就够)

useTransition

  • 标记低优先级更新
  • 不阻塞输入、点击
  • 用法:startTransition(() => { 耗性能更新 })

useDeferredValue

  • 延迟一个值
  • 等空闲再更新
  • 用法:const deferredVal = useDeferredValue(val)

共同目的

让耗性能的页面,不卡顿、不掉帧、保持流畅!

终极一句话

高优先级先走,低优先级等空闲 → 这就是 useTransition / useDeferredValue!

到此这篇关于react useDeferredvalue和useTransition的实现的文章就介绍到这了,更多相关react useDeferredvalue和useTransition内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决React报错Expected `onClick` listener to be a function

    解决React报错Expected `onClick` listener to be a function

    这篇文章主要为大家介绍了React报错Expected `onClick` listener to be a function解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • 一文学会使用Remix写API接口

    一文学会使用Remix写API接口

    这篇文章主要为大家介绍了一文学会Remix写API接口实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • React Hooks项目中使用IDB 8.x的实现

    React Hooks项目中使用IDB 8.x的实现

    IDB8.x是IndexedDB的轻量级封装库,提供基于Promise的简洁API,结合React Hooks可实现高效、可靠的客户端数据存储,本文就来介绍一下React Hooks项目中使用IDB 8.x的实现,感兴趣的可以了解一下
    2025-09-09
  • React setState是异步还是同步原理解析

    React setState是异步还是同步原理解析

    这篇文章主要为大家介绍了React setState是异步还是同步原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • react+antd树选择下拉框中增加搜索框

    react+antd树选择下拉框中增加搜索框

    这篇文章主要介绍了react+antd树选择下拉框中增加搜索框方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • react中的双向绑定你真的了解吗

    react中的双向绑定你真的了解吗

    这篇文章主要为大家详细介绍了react中的双向绑定,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • React18中的useDeferredValue示例详解

    React18中的useDeferredValue示例详解

    这篇文章主要介绍了React18中的useDeferredValue的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • React新文档切记不要滥用Ref

    React新文档切记不要滥用Ref

    这篇文章主要为大家介绍了React新文档滥用Ref出现的问题详解,以及如何正确的使用Ref,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2022-07-07
  • 在React项目中动态样式切换的方法大全

    在React项目中动态样式切换的方法大全

    在 React 应用开发中,根据组件的状态(state)、属性(props) 或外部数据来动态改变其外观是一项极其常见的任务,本文将全面、深入地探讨在 React 项目中动态切换样式的各种方法,从基础到高级,并提供大量代码示例和最佳实践,需要的朋友可以参考下
    2025-09-09
  • react新版本生命周期钩子函数及用法详解

    react新版本生命周期钩子函数及用法详解

    这篇文章主要介绍了react新版本生命周期钩子函数及用法详解,本文通过示例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04

最新评论