0Pricing
React Academy · 课时

使用 useOptimistic 实现即时反馈

使用 useOptimistic 在服务器变更进行期间显示乐观界面更新。

使用 useOptimistic 实现即时反馈 是 CoddyKit 上的免费 React Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 React Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 React Academy 课程共包含 4 节课。

欢迎

在本课中,您将使用 React 19 的 useOptimistic 钩子,在服务器变更操作进行期间显示即时的乐观界面变化,并在失败时自动回滚。

什么是乐观界面?

乐观界面指的是假设服务器变更操作会成功,不等待服务器响应就立即更新界面。如果操作失败,则回滚到之前的状态。

useOptimistic 基础

useOptimistic 接收实际状态和一个更新函数,并返回乐观状态以及应用乐观更新的函数。
'use client';
import { useOptimistic } from 'react';

const [optimisticLikes, addOptimisticLike] = useOptimistic(
  likes,                      // actual state from server
  (state, newLike) => [...state, newLike] // how to apply optimistic update
);

点赞按钮示例

用户点击 Like 时,通过 addOptimisticLike 立即在界面中显示新的点赞,然后发送实际请求。如果请求失败,乐观状态会自动恢复为实际状态。
async function handleLike() {
  addOptimisticLike({ id: Date.now(), user: currentUser });
  await likePost(postId); // server action
}

乐观状态存放在哪里

在过渡期间,optimisticLikes 会显示乐观值。服务器响应后,实际的 `likes` 状态通过重新验证得到更新,useOptimistic 会自动将其同步回实际状态。

乐观项目的等待指示器

请用视觉方式标记乐观项目(例如使其稍微变暗),让用户知道它们正在等待处理。您可以在乐观更新中添加 `pending: true` 标志,并据此设置样式。
const [optimisticMessages, addOptimistic] = useOptimistic(
  messages,
  (state, msg) => [...state, { ...msg, pending: true }]
);

// Render
{optimisticMessages.map(m => (
  <div key={m.id} style={{ opacity: m.pending ? 0.6 : 1 }}>{m.text}</div>
))}

在过渡中使用

useOptimistic 只能在 React 过渡(startTransition 或 useTransition)中使用。在 React 19 中与服务器操作结合使用时,这一过程会自动处理。
'use client';
import { startTransition } from 'react';

const handleSubmit = (data) => {
  startTransition(async () => {
    addOptimistic(data);
    await serverAction(data);
  });
};

发送聊天消息示例

在服务器保存消息期间,立即将已发送的消息显示在聊天列表中。消息会立即出现,并显示“发送中……”状态;服务器确认后,再切换为“已发送”。

错误回滚行为

如果服务器操作失败(抛出错误或被拒绝),useOptimistic 会自动丢弃乐观值,并恢复到上一个实际状态。您不需要手动实现回滚。

useOptimistic 与手动乐观更新

在 useOptimistic 出现之前,您需要管理两个状态变量(实际状态和乐观状态),并在 catch 代码块中手动回滚。useOptimistic 将这些工作整合到一个钩子中,并自动执行回滚。

快速检查

如果触发乐观更新的服务器操作失败,乐观状态会发生什么?

回顾

useOptimistic(actualState, updater) 返回 [optimisticState, addOptimistic]。请在服务器操作之前调用 addOptimistic,以获得即时反馈。如果操作失败,React 会自动恢复状态。它必须在 React 过渡中使用。

课程完成

恭喜您!您已完成 **服务器组件与 React 19 功能**。现在,您已经了解 RSC、use() 钩子、Actions、useActionState,以及用于现代 React 开发的 useOptimistic。

常见问题解答

「使用 useOptimistic 实现即时反馈」课时是免费的吗?

是的 — 「使用 useOptimistic 实现即时反馈」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 React Academy 课程的其余内容,请升级到 CoddyKit PRO。 React Academy 课程共包含 4 节课。

「使用 useOptimistic 实现即时反馈」这节课中我会学到什么?

使用 useOptimistic 在服务器变更进行期间显示乐观界面更新。 你通过在浏览器中直接运行的动手代码来练习 React Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 React Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 React Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「使用 useOptimistic 实现即时反馈」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 React Academy 课中编写并运行代码吗?

能。每节 React Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. React Server Components 详解
  2. 使用 use() 钩子读取异步资源
  3. React Actions 与 useActionState
  4. 使用 useOptimistic 实现即时反馈
← 返回 React Academy