当前位置: 首页 > news >正文

React18 新特性

React18 新特性

自动批量更新State

定义

import { useState } from 'react'const [x, setX] = useState(0)

渲染赋值

setX(5)

并发CM模式

同步不可中断更新机制 -> 异步可中断并行 状态更新 机制

React18 默认开启并发模式

详见代码

  1. ReactDOM 的引入
import ReactDOM from 'react-dom/client'
  1. render
const root = ReactDOM.createRoot(document.getElementById('root'))root.render(<App />)

useTransition

startTransition 函数可以将 state 更新标记为 非阻塞的 transition

import { startTransition } from 'react';function TabContainer() {const [tab, setTab] = useState('about');function selectTab(nextTab) {startTransition(() => {setTab(nextTab);});}// ...
}

useTransition 是一个让你在不阻塞 UI 的情况下来更新状态的 React Hook

isPending 标志,告诉你是否存在待处理的转换

startTransition 函数 允许你将状态更新标记为转换状态

function TabContainer() {const [isPending, startTransition] = useTransition();const [tab, setTab] = useState('about');function selectTab(nextTab) {startTransition(() => {setTab(nextTab);});}// ...
}

除了将任务变成非紧急,还有节流的效果

useDeferredValue

useDeferredValue 是一个 React Hook,可以让你延迟更新 UI 的某些部分

  • 在新内容加载期间显示旧内容。
  • 表明内容已过时
  • 延迟渲染 UI 的某些部分

useDeferredValue(value)

value:你想延迟的值,可以是任何类型

import { useState, useDeferredValue } from 'react';function SearchPage() {const [query, setQuery] = useState('');const deferredQuery = useDeferredValue(query);// ...
}

严格模式

React 提供了 “严格模式”,在严格模式下开发时,它将会调用每个组件函数两次。通过重复调用组件函数,严格模式有助于找到违反这些规则的组件

严格模式在生产环境下不生效,因此它不会降低应用程序的速度。如需引入严格模式,你可以用 <React.StrictMode> 包裹根组件。一些框架会默认这样做

index.js 页面

const root = ReactDOM.createRoot(document.getElementById('root'))root.render(<React.StricMode><App /></React.StricMode>
)

Suspense组件的变化

<Suspense> 允许你显示一个退路方案(fallback)直到它的子组件完成加载

<Suspense fallback={<Loading />}><SomeComponent />
</Suspense>

React18 可以不设置 fallback

其他

如果React 返回一个空组件, React17 只允许返回 null 。React18 也允许返回undefined。

http://www.lryc.cn/news/151106.html

相关文章:

  • HarmonyOS Codelab 优秀样例——购物应用,体验一次开发多端部署魅力
  • 音频基本知识
  • 小程序中如何给会员卡设置到期时间
  • Cookie与Session的区别及如何选择
  • 【快手小玩法-弹幕游戏】开发者功能测试报告提交模板
  • 微信小程序在线阅读系统微信小程序设计与实现
  • 【OpenCV入门】第七部分——图像的几何变换
  • 淘宝app商品详情原数据接口API(支持高并发请求/免费测试)
  • JS中的new操作符
  • 文件编辑器、用户管理,嘎嘎学
  • Java获取当前类名的两种方法
  • windows系统开机自启打开指定网页
  • Java-HashMap中put()方法是如何实现的,内含详细流程图
  • kaggle赛后总结
  • 基于Vue前端框架构建BI应用程序
  • 【文心一言】学习笔记
  • Xilinx UltraScale架构之可配置逻辑块CLB
  • springboot web开发整合Freemarker 模板引擎
  • Python 连接 SQL 数据库 -pyodbc
  • Vue框架--Vue中的数据代理
  • 每日一题(链表中倒数第k个节点)
  • python如何求两list的公共区域
  • SpringMVC中文乱码(request或response)前后端处理
  • Redis面试题大全含答案
  • stable diffusion实践操作-提示词-整体环境
  • Spring Aop--通知注解
  • 说说CDN和负载均衡具体是怎么实现的
  • Leetcode107. 二叉树的层序遍历 II
  • 【广州华锐互动】VR党建多媒体互动展厅:随时随地开展党史教育
  • libdrm全解析三十九 —— 源码全解析(36)