React 19 新特性

React 19 引入了多项新特性和改进,旨在提升开发都体验和应用性能。

1. Actions(动作)

Actions 简化了异步操作的处理,自动管理待处理状态、错误、乐观更新和表单提交。开发者用 useTransition 来处理待处理状态,确保 UI 在数据变化时保持响应性。例如:

javascript 复制代码
function UpdateName() {
  const [name, setName] = useState("");
  const [error, setError] = useState(null);
  const [isPending, startTransition] = useTransition();

  const handleSubmit = () => {
    startTransition(async () => {
      const error = await updateName(name);
      if (error) {
        setError(error);
        return;
      }
      redirect("/path");
    });
  };

  return (
    <div>
      <input value={name} onChange={(event) => setName(event.target.value)} />
      <button onClick={handleSubmit} disabled={isPending}>
        Update
      </button>
      {error && <p>{error}</p>}
    </div>
  );
}

2. 新的 Hook: useOptimistic

useOptimistic 用于在异步进行时乐观地显示最终状态,提升用户体验。例如:

javascript 复制代码
function ChangeName({ name, setName }) {
  const [error, submitAction, isPending] = useActionState(
    async (previousState, formData) => {
      const error = await updateName(formData.get("name"));
      if (error) {
        return error;
      }
      redirect("/path");
      return null;
    },
    null
  );

  return (
    <form action={submitAction}>
      <input type="text" name="name" />
      <button type="submit" disabled={isPending}>
        Update
      </button>
      {error && <p>{error}</p>}
    </form>
  );
}

3. 新的 API: use

useAPI 允许在渲染中读取资源,如 Promise 和上下文,简化异步数据处理。例如:

javascript 复制代码
import { use } from 'react';

function Comments({ commentsPromise }) {
    const comments = use(commentsPromise);
    return comments.map(comment => <p key={comment.id}>{comment}</p>);
}

function Page({ commentsPromise }) {
    return (
        <Suspense fallback={<div>Loading...</div>}>
            <Comments commentsPromise={commentsPromise} />
        </Suspense>
    );
}

4. 服务器组件 (Server Components)

React 19 有了稳定服务器组件的支持,允许在服务器端渲染部分或全部,提升性能和 SEO。例如:

javascript 复制代码
// ServerUserInfo.react.server.js
import { db } from './database';

async function fetchUserData(userId) {
    return db.query('SELECT * FROM users WHERE id = $1', [userId]);
}

function ServerUserInfo({ userId }) {
    const userData = fetchUserData(userId);
    return (
        <div>
            <h1>User Information</h1>
            <p>Name: {userData.name}</p>
            <p>Email: {userData.email}</p>
        </div>
    );
}

5. 支持自定义元素

React 19 完全支持自定义元素,允许无缝集成 Web 组件。例如:

javascript 复制代码
function CustomElementWrapper() {
    return <my-custom-element prop="value" />;
}

6. 文档元数据支持

React 19 允许直接在组件中渲染 <title>、<meta> 等标签,自动提升到文档头部优化 SEO 管理。例如:

javascript 复制代码
function SEOComponent() {
    return (
        <>
            <title>页面标题</title>
            <meta name="description" content="页面描述" />
        </>
    );
}

7. 样式表优先级设置

React 19 引入了样式表优先级设置,允许开发者控制样式表的应用顺序,确保预期应用。例如:

javascript 复制代码
function ComponentOne() {
    return (
        <Suspense fallback="loading...">
            <link rel="stylesheet" href="foo" precedence="default" />
            <link rel="stylesheet" href="bar" precedence="high" />
            <article className="foo-class bar-class">
                {/* ... */}
            </article>
        </Suspense>
    );
}

8. 在任何组件中渲染异步脚本

React 19 允许在任何组件中渲染异步脚本,自动处理去重,简化脚本管理。例如:

javascript 复制代码
function MyComponent() {
    return (
        <div>
            <script async src="..." />
            Hello World
        </div>
    );
}
相关推荐
前端进阶之旅6 小时前
AI Agent 直连禅道 bug 平台的完整链路实战
前端开发
爱上纯净的蓝天1 天前
使用 AtomCode 构建微前端架构:从设计到实现实战
架构·vue·实战·react·微前端·atomcode
后台开发者Ethan1 天前
setState组件更新
前端·javascript·react
山海云端有限公司3 天前
随机诗词API实战:Vue项目接入完整示例与5个常见坑
vue·实战·前端开发·跨域·api调用·随机诗词api
Richown3 天前
Solidity 升级代理:可升级不是随便改逻辑
区块链·react
Richown3 天前
Solana 账户模型入门:别用以太坊思维写程序
区块链·react
Token炼金师3 天前
提词的艺术:Few-shot、CoT、Function Calling、ReAct 与自洽性 —— Prompt 工程六技
人工智能·llm·prompt·react·function call·cot·few-show
名字还没想好☜4 天前
React useEffect 依赖数组踩坑:闭包陷阱与清理函数
前端·javascript·react.js·react·useeffect
阿拉斯攀登7 天前
Agent 核心架构:思考-行动-观察循环(ReAct)
人工智能·ai·agent·react
鹰影477 天前
一款AI笔记助手和远程同步的markdown笔记idea-note
人工智能·笔记·rust·typescript·react