ReactJS 教程

ReactJS 主页 ReactJS 简介 ReactJS 路线图 ReactJS 下载安装和环境配置 ReactJS 功能 ReactJS 优势和缺点 ReactJS 架构 ReactJS 创建 React 应用程序 ReactJS JSX ReactJS 组件 ReactJS 嵌套组件 ReactJS 使用组件 ReactJS 集合组件 ReactJS 样式 ReactJS 属性 (props) ReactJS 使用属性创建组件 ReactJS props 验证 ReactJS 构造函数 ReactJS 组件生命周期 ReactJS 事件管理 ReactJS 创建事件感知组件 ReactJS Expense Manager 事件 ReactJS 状态管理 ReactJS 状态管理 API ReactJS 无状态组件 ReactJS Hooks 进行状态管理 ReactJS Hooks 的组件生命周期 ReactJS 布局组件 ReactJS 分页 ReactJS Material UI ReactJS Http 客户端编程 ReactJS 表单编程 ReactJS 受控组件 ReactJS 非受控组件 ReactJS Formik ReactJS 条件渲染 ReactJS 列表 ReactJS Key 键 ReactJS 路由 ReactJS Redux ReactJS 动画 ReactJS Bootstrap ReactJS Map ReactJS 表格 ReactJS 使用 Flux 管理状态 ReactJS 测试 ReactJS CLI 命令 ReactJS 构建和部署 ReactJS 示例

Hooks

ReactJS Hooks 简介 ReactJS 使用 useState ReactJS 使用 useEffect ReactJS 使用 useContext ReactJS 使用 useRef ReactJS 使用 useReducer ReactJS 使用 useCallback ReactJS 使用 useMemo ReactJS 自定义 Hooks

ReactJS 高级

ReactJS 可访问性 ReactJS 代码拆分 ReactJS 上下文 ReactJS 错误边界 ReactJS 转发 Refs ReactJS 片段 ReactJS 高阶组件 ReactJS 与其他库集成 ReactJS 优化性能 ReactJS Profiler API ReactJS Portals ReactJS 不使用 ES6 ECMAScript ReactJS 不使用 JSX 的 React ReactJS Reconciliation ReactJS Refs 和 DOM ReactJS 渲染道具 ReactJS 静态类型检查 ReactJS 严格模式 ReactJS Web 组件

其他概念

ReactJS 日期选择器 ReactJS Helmet ReactJS 内联样式 ReactJS PropTypes ReactJS BrowserRouter ReactJS DOM ReactJS 轮播 ReactJS 图标 ReactJS 表单组件 ReactJS 参考 API

ReactJS 有用资源

ReactJS 快速指南 ReactJS 备忘录 Axios 备忘录 ReactJS 有用资源 ReactJS 讨论


ReactJS - startTransition()

StartTransition 是一个 React 函数,它允许开发人员在不中断用户界面的情况下更新应用程序的状态。换句话说,它允许我们在进行状态更新的同时,防止我们的 Web 应用程序变慢或无响应。

startTransition 函数用于将状态更新标记为"转换"。当我们需要同时进行多个状态更新时,它非常有用。React 通过将这些更新标识为转换来确保这些更新是非阻塞的,这意味着它们不会产生不必要的加载指示或让我们的应用程序感觉很慢。

语法

startTransition(scope)

参数

scope − 它是一个调用一个或多个设置函数来更新某些状态的函数。 React 直接调用不带参数的 scope,在 scope 函数调用期间安排的所有同步状态更新都被标记为转换。它们不会阻塞流量,也不会显示不需要的加载信号。

返回值

此函数不返回任何内容。

示例

示例 − 基本示例

在此示例应用中,我们将有一个简单的计数器,当单击按钮时,该计数器会递增。startTransition 函数用于使更新更顺畅。因此,此应用的代码如下 −

import React, { useState, startTransition } from 'react';

function BasicApp() {
   const [count, setCount] = useState(0);   
   const handleClick = () => {
      startTransition(() => {
         setCount(count + 1);
      });
   };
   
   return (
      <div>
         <p>Count: {count}</p>
         <button onClick={handleClick}>Increment</button>
      </div>
   );
}

export default BasicApp;

输出

count increasing

示例 − 列表渲染

在此示例中,我们在将项目添加到列表时使用 startTransition 函数以确保流畅的用户体验。因此,我们还将有一个按钮来在列表中添加项目,通过单击该项目,新项目将添加到列表中。因此,此应用程序的代码如下 −

import React, { useState, startTransition } from 'react';

function ListApp() {
   const [items, setItems] = useState(['Item 1', 'Item 2', 'Item 3']);   
   const handleAddItem = () => {
      startTransition(() => {
         setItems([...items, `Item ${items.length + 1}`]);
      });
   };
   
   return (
      <div>
         <ul>
            {items.map((item, index) => (
            <li key={index}>{item}</li>
            ))}
         </ul>
         <button onClick={handleAddItem}>Add Item</button>
      </div>
   );
}

export default ListApp;

输出

reactapp_add_item.jpg

示例 −在选项卡之间切换

要使用 startTransition,我们需要遵循某些步骤 −

  • 首先,我们必须在代码中导入 React 的 startTransition 方法。

  • 现在借助 useState,我们可以在组件或方法中定义想要更新的状态。

  • 现在我们可以编写一个执行状态更新的函数,然后将其包装在 startTransition 调用中。

  • 因此,当我们调用 startTransition 时,React 会将状态更新视为转换,这使其非阻塞。

应用程序包括 −

步骤 1 − 我们将导入 useState 和 startTransition 方法。

步骤 2 −我们将在 TabSwitcher 组件中定义 currentTab 状态变量,该变量跟踪当前选定的选项卡。

步骤 3 − 我们将定义 switchTab 函数,该函数将选项卡名称作为输入。要更新 currentTab 状态,此函数将调用 startTransition。我们确保选项卡切换是非阻塞的,并且不会导致 UI 变得无响应,方法是将此状态更新封闭在 startTransition 中。

步骤 4 − render 方法显示两个选项卡及其相关内容。当我们单击选项卡按钮时,将调用 switchTab 函数,该函数以非阻塞方式刷新选定的选项卡。

import React, { useState, startTransition } from 'react';

function App() {
   const [currentTab, setCurrentTab] = useState('Tab 1');   
   const switchTab = (tabName) => {
      startTransition(() => {
         setCurrentTab(tabName);
      });
   };
   
   return (
      <div>
         <h1>Tab Switcher</h1>
         <div className="tabs">
            <button
               className={currentTab === 'Tab 1' ? 'active-tab' : 'tab'}
               onClick={() => switchTab('Tab 1')}
            >
               Tab 1
            </button>
            <button
               className={currentTab === 'Tab 2' ? 'active-tab' : 'tab'}
               onClick={() => switchTab('Tab 2')}
            >
               Tab 2
            </button>
         </div>
         <div className="tab-content">
            {currentTab === 'Tab 1' && <p>This is the content of Tab 1.</p>}
            {currentTab === 'Tab 2' && <p>This is the content of Tab 2.</p>}
         </div>
      </div>
   );
}

export default App;

输出

tab switcher

限制

  • startTransition 无法帮助跟踪待处理的转换。要在转换期间显示加载指示器,请使用 useTransition。

  • 只有当我们有权访问状态的设置函数时,我们才能使用 startTransition。

  • 传递给 startTransition 的函数应该是同步的。它会立即运行,在执行期间将状态更新标记为转换。

  • 标记为转换的状态更新可能会被其他更新中断。

摘要

通过提供非阻塞状态更新,React 的 startTransition 方法可帮助我们创建高度响应的 UI。通过选择特定的状态变化作为转换,我们确保应用程序即使在重新渲染期间也能保持响应。

reactjs_reference_api.html