写点什么

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

评论

发布
暂无评论

新一期HarmonyOS认证正式发布,速来围观!

HarmonyOS开发者

HarmonyOS

OpenHarmony 3.2 Beta1版本正式发布

OpenHarmony开发者

Open Harmony

金融机构等入局数字藏品;证券期货类应用用户规模达1.34亿

易观分析

金融 证券

CountDownLatch

急需上岸的小谢

6月月更

微信团队分享:微信后台在海量并发请求下是如何做到不崩溃的

JackJiang

微服务 即时通讯 im开发 微信架构

2022年SaaS行业十大趋势:SaaS的新机遇有哪些?

小炮

【LeetCode】划分数组使最大差为 K Java题解

Albert

LeetCode 6月月更

孙勇男:实时视频 SDK 黑盒测试架构丨Dev for Dev 专栏

声网

自动化测试 Dev for Dev

App中快速复用微信登录授权的一种方法

Speedoooo

APP开发 微信授权 微信登录

创新不止,英特尔强调HPC的开放性和可持续性

科技之家

从“预见”到“遇见”SAE 引领应用步入 Serverless 全托管新时代

Serverless Devs

阿里云 Serverless

Fomo3D模式dapp系统开发详解

开发微hkkf5566

「技术人生」第8篇:如何画业务大图

阿里巴巴中间件

阿里云 云原生 技术文章

打金?工作室?账号被封?游戏灰黑产离我们有多近

行者AI

面向高校 | “云原生技术应用与实践”示范课程项目开放申报

Serverless Devs

AIOps落地五大原则(一):大势所趋

BizSeer必示科技

【前端每日一学】vue框架的深入学习

恒山其若陋兮

6月月更

使用APICloud开发app的动态权限及Android平台targetSdkVersion设置教程

YonBuilder低代码开发平台

android 权限管理 APICloud

【爬虫必备->Scrapy框架】初篇

孤寒者

爬虫 6月月更 scrapy框架

小程序IDE,大趋势下催生的效能提速工具

Speedoooo

ide 效率工具 编程效率 移动开发 APP开发

重磅发布 | Serverless 应用中心:Serverless 应用全生命周期管理平台

Serverless Devs

如何使用阿里云 CDN 对部署在函数计算上的静态网站进行缓存

Serverless Devs

Serverless 前端 前端工具

优酷移动端弹幕穿人架构设计与工程实战总结

阿里巴巴文娱技术

技术 音视频 弹幕 视频 移动端

开放银行引入第三方生态,系统风控助力事前-中风险监控

Speedoooo

数字化 开放银行 异业合作

社区活动 | Apache Doris 社区长期征文活动&演讲议题征集 正式开始啦!

SelectDB

开源社区 apache doris 征文投稿 议题征集 社区活动

开源生态|超实用开源License基础知识扫盲帖(上)

Orillusion

开源 WebGL 元宇宙 Metaverse webgpu

同心助力,战役有AI

开源社

人工智能 疫情防控

flutter系列之:用来管理复杂状态的State详解

程序那些事

flutter 程序那些事 6月月更 widget

重磅!KubeEdge单集群突破10万边缘节点|云原生边缘计算峰会前瞻

华为云开发者联盟

云计算 云原生 华为云

50万条数据,解读四川两座城市数字经济发展底气(下)

易观分析

经济 四川经济

三大特性,多个场景,Serverless 应用引擎 SAE 全面升级

Serverless Devs

阿里云 Serverless 微服务

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