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>
    );
}
相关推荐
友莘居士1 天前
Dify中的Agent和发现和调用mcp工具两个节点调用的异同
agent·react·dify·functioncalling·mcp
aiguangyuan2 天前
前端开发性能优化概要
系统架构·vue·react·前端开发
aiguangyuan3 天前
前端开发 React 状态优化
系统架构·前端开发
aiguangyuan5 天前
React 项目性能瓶颈分析
系统架构·前端开发
叶 落6 天前
Component cannot be used as a JSX component
typescript·react
Robbie丨Yang7 天前
近期工作感想:职业规划篇
html·css3·前端开发·工作·职业规划
白仑色7 天前
JavaScript 语言基础详解
开发语言·javascript·ecmascript·前端开发
小浣熊喜欢揍臭臭8 天前
react+antd+表格拖拽排序以及上移、下移、移到顶部、移到底部
前端·前端框架·react
小浣熊喜欢揍臭臭8 天前
react+antd 可拖拽模态框组件
前端·javascript·react
人肉推土机10 天前
Planning Agent:基于大模型的动态规划与ReAct机制,实现复杂问题自适应执行求解
大模型·动态规划·react·planning agent