【useTransition Hook】将某些状态更新标记为“过渡”,优化渲染性能

ops/2025/1/22 13:47:03/

文章目录

      • 引言
      • 语法
      • 参数
      • 返回值
      • 基本用法
      • 总结

引言

useTransition 是 React 中用于优化渲染性能的 Hook。它允许你将某些状态更新标记为“过渡”(transition),从而在高优先级更新(如用户输入)发生时,低优先级更新(如数据加载或复杂计算)可以被延迟,以确保高优先级更新能够更快地响应。本文将详细介绍 useTransition 的语法、参数、返回值以及具体用法。

语法

useTransition 的基本语法如下:

const [isPending, startTransition] = useTransition();

参数

useTransition 不接受任何参数。

返回值

useTransition 返回一个包含两个元素的数组:

  1. isPending: 一个布尔值,表示当前是否有过渡状态正在进行中。

    • true: 表示过渡状态正在进行中。
    • false: 表示过渡状态已完成。
  2. startTransition: 一个函数,用于将状态更新标记为“过渡”。

    • 签名: startTransition(callback: () => void): void
    • 参数: callback 是一个函数,包含需要标记为“过渡”的状态更新逻辑。
    • 返回值: 无。

基本用法

以下是一个简单的示例,展示如何使用 useTransition 来优化搜索功能的渲染性能。

// src/components/useTransition/LargeList.tsx
import React from 'react';interface LargeListProps {items: string[];
}export default function LargeList({ items }: LargeListProps) {return (<ul>{items.map((item, index) => (<li key={index}>{item}</li>))}</ul>);
}
// src/components/useTransition/SearchableList.tsx
import { useState, useTransition } from 'react';
import LargeList from './LargeList';const getItems = () => {console.log('getItems');return Array.from({ length: 10000 }, (_, i) => `Item ${i + 1}`);
};export default function SearchableList() {const [items, setItems] = useState(getItems);const [searchValue, setSearchValue] = useState('');const [isPending, startTransition] = useTransition();const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {const value = e.target.value;// 将用户输入标记为“过渡”状态startTransition(() => {setSearchValue(value);});};const filteredItems = items.filter(item =>item.toLowerCase().includes(searchValue.toLowerCase()));return (<div><inputtype="text"placeholder="搜索..."value={searchValue}onChange={handleChange}/>{isPending ? <p>加载中...</p> : <LargeList items={filteredItems} />}</div>);
}
// src/App.tsx
import SearchableList from "./components/useTransition/SearchableList";function App() {return <SearchableList />;
}export default App;

总结

  • 适用场景:
    • 需要处理大量数据的列表、搜索功能等。
    • 需要优化复杂计算或数据加载的场景。

希望这篇文章能帮助你更好地理解useTransition的使用方法,并为你的 React 项目带来更多的灵感和便利。如果你有任何问题或建议,欢迎留言交流!


http://www.ppmy.cn/ops/152203.html

相关文章

【AI论文】GameFactory:利用生成式互动视频创造新游戏

摘要&#xff1a;生成式游戏引擎有望通过自主创建新内容并减轻手工工作量&#xff0c;从而彻底改变游戏开发领域。然而&#xff0c;现有的基于视频的游戏生成方法未能解决场景泛化的关键挑战&#xff0c;限制了它们仅适用于具有固定风格和场景的现有游戏。在本文中&#xff0c;…

人类大脑与大规模神经网络的对比及未来展望

引言 随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;研究人员不断尝试构建更加复杂和强大的模型&#xff0c;以期实现与人类大脑相媲美的智能水平。本文将探讨当前大规模神经网络&#xff08;LLM, Large Language Models&#xff09;的发展现状&#xff0…

黑马Java面试教程_P1_导学与准备篇

系列博客目录 文章目录 系列博客目录导学Why?举例 准备篇企业是如何筛选简历的(筛选简历的规则)HR如何筛选简历部门负责人筛选简历 简历注意事项简历整体结构个人技能该如何描述项目该如何描述 应届生该如何找到合适的练手项目项目来源找到项目后&#xff0c;如何深入学习项目…

借助 .pth 文件完成多个 Python 解释器的合并

相关搜索 conda 虚拟环境如何使用 ROS 的 Python 模块conda 虚拟环境找不到 catkin_pkg 问题描述 如果你在 Ubuntu 20.04 中装了 conda&#xff0c;那么你的 Ubuntu 会有这些 Python 解释器&#xff1a; /usr/bin/python3&#xff1a;系统的解释器 (版本为 3.8.10&#xff0…

MQ消息队列

1、消息队列特点 2、RabbitMQ

进程组成、状态、前趋图、资源图(高软6)

系列文章目录 2.2进程组成、状态、前趋图、资源图 文章目录 系列文章目录前言一、本节内容进程的组成进程真题前趋图资源图真题 总结 前言 本节讲明进程的组成与状态&#xff0c;以及前趋图、资源图。 一、本节内容 进程的组成 进程真题 AC 前趋图 资源图 真题 CB 总结 就…

MongoDB 备份与恢复综述

目录 一、基本概述 二、逻辑备份 1、全量备份 2、增量备份 3、恢复 三、物理备份 1、cp/tar/fsync 2、WiredTiger 热备份 3、恢复 四、快照备份 一、基本概述 MongoDB 是一种流行的 NoSQL 数据库&#xff0c;它使用文档存储数据&#xff0c;支持丰富的查询语言和索引…

Selenium工具使用Python 语言实现下拉框定位操作

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 我们通常遇到的下拉框有显性的下拉框和隐性的下拉框&#xff1b;有的下拉框还可以进行单选或多选操作&#xff0c;在selenium中如何实现下拉框的定位通常使用selec…