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