Featured image of post React 19 新功能:开发人员需要了解的内容Featured image of post React 19 新功能:开发人员需要了解的内容

React 19 新功能:开发人员需要了解的内容

通过代码示例深入了解 React 19 的服务器组件、操作、use() 挂钩和新编译器

React 19 发生了什么变化

React 19 不是一个小更新,而是一个范式转变。稳定的服务器组件、新的钩子和 React 编译器从根本上改变了开发人员编写应用程序的方式。

稳定的服务器组件

React 服务器组件 (RSC) 现已投入生产。通过在服务器上渲染并将 HTML 发送到客户端,它们可以显着减小包的大小。

// app/page.jsx — Server Component (default)
export default async function Home() {
  const posts = await db.query('SELECT * FROM posts');
  return (
    <ul>
      {posts.map(post => (
        <li key={post.id}>{post.title}</li>
      ))}
    </ul>
  );
}

使用 useState 或 useEffect 的组件必须在顶部声明“use client”。

use() 钩子

最值得注意的新功能是 use() 钩子,它允许您直接在组件内部解析 Promise。

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

与传统的钩子不同,use() 在条件语句和循环内部工作。

表单的服务器操作

服务器操作让您无需编写客户端 JavaScript 即可处理表单提交。

export default function CreatePost() {
  async function handleSubmit(formData) {
    'use server';
    const title = formData.get('title');
    await db.execute('INSERT INTO posts (title) VALUES (?)', [title]);
    revalidatePath('/');
  }

  return (
    <form action={handleSubmit}>
      <input name="title" required />
      <button type="submit">Create</button>
    </form>
  );
}

反应编译器

React Compiler(以前称为 React Forget)会自动插入 useMemo 和 useCallback 调用。在 v19 兼容的代码库中不再需要手动优化挂钩。

已弃用的 API

  • 完全删除了像 componentWillMount 这样的旧生命周期方法
  • ReactDOM.render() 完全被 createRoot() 取代
  • PropTypes 官方支持结束

从 React 18 迁移通常需要一天到一周的时间,具体取决于项目规模。