2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

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:498819

评论

发布
暂无评论

KMP的小记录

Geek_02fd98

KMP

呀,又是一个谣言「Day 12」

道伟

28天写作

靠速度说话!你还不够了解的“新基建闪电侠”

脑极体

为什么你停滞不前

ES_her0

28天写作 3月日更

职场中吃力不讨好?从根因上去破解

一笑

28天写作

线上故障后的第一要务

鱼天翱

线上故障 问责

||运算你真的了解吗?

叫练

运算符 java基础

(28DW-S8-Day12) 读一份刚发布的《在线学习大数据报告》

mtfelix

大数据 28天写作

LeetCode题解:190. 颠倒二进制位,使用遮罩,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

Python基础之:Python中的流程控制

程序那些事

Python 程序那些事 流程控制

基于pandas

rainbow

c#包含日志输出的项目搭建

happlyfox

C# 日志 28天写作 3月日更

Kubelet从人门到放弃:拓扑管理(下)

DCOS

Serverless Kubernetes 微服务 云原生 函数计算

翻译:《实用的Python编程》03_04_Modules

codists

Python

区块链培训哪家专业,引领区块链技术创新

CECBC

区块链

用三个分析看,AI会是百度智能云的好“捕手”吗?

ToB行业头条

百度 #百度智能云#

SRS流媒体服务器源码分析:Rtmp publish流程

赖猫

音视频 服务器 SRS 流媒体开发

架构学习2021年03月03日(002)

张小胖

Mybatis系列全解(八):Mybatis的9大动态SQL标签你知道几个?提前致女神!

潘大壮

Java 后端 mybatis 后台 mybatis源码

Synchronized升级成重量级锁之后就下不来了?你错了!

yes

Java JVM

【笔记】第六周-第1课

Geek_娴子

试用期没过,因在公司上了1024网站...

程序猿石头

程序员 网络安全 信息安全 个人隐私

死磕归并排序算法

Silently9527

算法 排序算法 快速排序

产品训练营 12 课:PRD需求文档

三笠

产品训练营

备战金三银四必看:2021最新版Java春招手册(五大面试专栏)

比伯

Java 编程 架构 面试 程序人生

恋物志(一):网红带货,宠主追捧,2021年宠物智能硬件会火吗?

脑极体

工作中,我们常用的Oracle内置函数有哪些?

xiezhr

oracle sql sql查询 函数 3月日更

Spark支持自定义Python环境

walker12138

Docker spark k8s Jupyter Notebook

互联网信贷风险与大数据 个人信贷业务互联网化

张老蔫

28天写作

据说很多女性看不懂地图——视觉表象

Justin

心理学 28天写作 游戏设计

从业务在线化视角实施数字化落地的两大路径

boshi

数字化 七日更

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