AICon 上海站|90%日程已就绪,解锁Al未来! 了解详情
写点什么

React 19 稳定版发布:新特性介绍和升级方法

作者:Gladiators Battle

  • 2024-12-25
    北京
  • 本文字数:2045 字

    阅读完需:约 7 分钟

React 19 稳定版发布:新特性介绍和升级方法

React 19 已正式发布了稳定版,现已在 npm 上可用!它包含许多特性和增强,旨在简化开发、提高性能并简化常见 UI 模式的处理操作。本文将介绍 React 19 中的新特性以及如何在项目中采用这些特性。


React 19 中的关键新增特性


动作和异步转换


动作(Action)简化了很多异步操作(如数据突变、待处理状态、错误处理和乐观更新)的管理。你可以使用 useTransition 或新的 useActionState 钩子来:


自动处理待处理状态。


提供更好的错误处理。


使用 action 或 formAction 属性管理表单提交元素。


示例:使用 useActionState 简化表单


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>  );}
复制代码


使用 useOptimistic 进行乐观更新


新的 useOptimistic 钩子允许你在等待异步响应时向用户提供即时反馈。


function ChangeName({ currentName, onUpdateName }) {  const [optimisticName, setOptimisticName] = useOptimistic(currentName);  const submitAction = async (formData) => {    const newName = formData.get("name");    setOptimisticName(newName);    const updatedName = await updateName(newName);    onUpdateName(updatedName);  };  return (    <form action={submitAction}>      <p>Your name is: {optimisticName}</p>      <input type="text" name="name" />    </form>  );}
复制代码


use API


use API 允许你有条件地渲染 Promise 和上下文,从而实现更灵活的组件设计。


import { use } from 'react';function Comments({ commentsPromise }) {  const comments = use(commentsPromise);  return comments.map(comment => <p key={comment.id}>{comment}</p>);}
复制代码


原生元数据管理


React 19 支持直接在组件中渲染标签,并自动将它们提升到对应部分。


function BlogPost({ post }) {  return (    <article>      <title>{post.title}</title>      <meta name="author" content="Author Name" />    </article>  );}
复制代码


增强的样式表和脚本管理


React 19 引入了对以下项的内置支持:


使用可控优先级的样式表。


在组件树中渲染的异步脚本,确保重复数据删除和正确的执行顺序。


<link rel="stylesheet" href="styles.css" precedence="default" /><script async src="script.js"></script

复制代码


服务端组件和动作


React 服务端组件现已稳定,允许提前渲染组件。与服务端动作(通过“use server”指令启用)配对后,客户端组件可以无缝调用异步服务端函数。


改进的错误处理


React 19 整合了错误报告,提供简洁且可操作的错误消息。开发人员现在可以使用 onCaughtError、onUncaughtError 和 onRecoverableError 进行细粒度的错误处理。


Ref 作为 Prop


函数组件现在可以接受 ref 作为 prop,通过消除对 forwardRef 的需求来简化代码。


水合(Hydration)和第三方集成


React 19 改进了水合,可以优雅地处理浏览器扩展或第三方脚本插入的意外元素。


预加载资源


使用资源预加载 API(例如 preload 和 preinit)优化性能:


import { preload, preinit } from 'react-dom';preinit('script.js', { as: 'script' });preload('font.woff', { as: 'font' });
复制代码


两个用于预渲染的新 API 改进了现有的 renderToString 函数,它们会等待所有数据加载后再返回静态 HTML 流。这两个函数称为 prerender 和 prerenderToNodeStream。虽然它们是为流式传输环境设计的,但它们不会在内容加载时进行流式传输,后者在 renderToPipeableStream 和 renderToReadableStream 中已经能做到了。在这两种情况下,文档都指出这些函数通常由框架调用,并且“大多数组件不需要导入或使用它们”。


Suspense 也有所改进。React 19 中的预热特性意味着临时回退内容会立即渲染,而之前它会等待其他兄弟组件先渲染。


如何升级


请遵循 React 19 升级指南_(_https://react.dev/blog/2024/12/05/react-19),内有分步说明。主要注意事项包括:


重大更改(指南中有文档)。


测试应用程序的兼容性。


更新使用 React 作为对等依赖项的依赖项。


立即开始


通过 npm 将你的项目升级到 React 19:


npm install react@19 react-dom@19
复制代码


浏览官方 React 19 文档_(https://react.dev/blog/2024/12/05/react-19)_ 以深入了解这些新特性和最佳实践。


React 19 代表了一次飞跃,它为开发人员提供了强大的工具来创建动态、高性能和可访问的应用程序。立即开始探索吧!


原文链接:

https://dev.to/gladiatorsbattle/react-19-stable-release-whats-new-and-how-to-upgrade-299d

2024-12-25 12:498691

评论

发布
暂无评论

BI掌柜量化交易系统开发|BI掌柜炒币机器人软件APP开发

系统开发

上线 Python 应用仅需一条命令的开源框架:Zappa(详细教程)

HelloGitHub

Python Serverless 无服务器云函数

Python基础之:函数

程序那些事

Python 数据分析 Python3 程序那些事

阿里P8大牛亲自讲解!难道Android真的凉了?3面直接拿到offer

欢喜学安卓

android 程序员 面试 移动开发

Python 语言基础变量获得变量类型

HoneyMoose

(28DW-S8-Day16) 在线教育体验课

mtfelix

28天写作

二维码高端路线养成计

happlyfox

学习 技能 28天写作 3月日更

MT马特量化交易系统开发|MT马特量化交易软件APP开发

系统开发

了解MySQL6种约束的不同和特点

华为云开发者联盟

MySQL 数据 约束 主键约束 自增长约束

《我想进大厂》之分布式锁夺命连环9问 | 大理版人在囧途

艾小仙

Java redis zookeeper 分布式锁

突破关系型数据库桎梏:云原生数据库中间件核心剖析

京东科技开发者

数据库 nosql 分布式系统

Python 语言基础变量定义和使用

HoneyMoose

面试现场:小伙伴的美团一面分享和分析[含答案]

小傅哥

Java 面试 小傅哥

亿级用户中心的设计与实践

vivo互联网技术

大数据 架构设计 数据安全

Python 语言基础变量的类型转换

HoneyMoose

Python 语言基础之 变量和常量

HoneyMoose

女神节·走近又美又飒的程序媛

华为云开发者联盟

华为 程序媛 IT 工程师 汉服

工作日志3-2-3

技术骨干

列表推导式与字典推导式,滚雪球学 Python

梦想橡皮擦

28天写作 3月日更

10 个解放双手超实用在线工具,有些代码真的不用手写

程序员小富

Java

阿里P8大佬亲自讲解!万字Android技术类校招面试题汇总,已拿offer

欢喜学安卓

android 程序员 面试 移动开发

拖延症这个毛病「Day 16」

道伟

28天写作

快速排序算法实现及优化

Silently9527

Java 排序算法 快速排序

实现一个全链路监控平台很难吗?Pinpoint、SkyWalking、Zipkin,哪个实现比较好?

xcbeyond

架构 技术方案 链路监控 3月日更

小喜量化交易系统开发|小喜APP软件开发

系统开发

LoadRunner测试中遇见的不可思议的问题及其解决方法

陈磊@Criss

七日更 28天写作 3月日更

【笔记】第六周 - 第 2 课

Geek_娴子

正则表达式.03 - 分组

insight

正则表达式 3月日更

《精通比特币》学习笔记(第四章)

棉花糖

区块链 读书笔记 3月日更

知识+AI融合创新探索,华为云论文被AI顶级学术期刊IEEE TPAMI接受

华为云开发者联盟

AI 模型 华为云 卷积神经网络 IEEE TPAMI论文

大括号之谜:C++的列表初始化语法解析

华为云开发者联盟

c++ 函数 语法 元素 std::array

React 19 稳定版发布:新特性介绍和升级方法_架构/框架_InfoQ精选文章