React18 新特性
自动批量更新State
定义
import { useState } from 'react'
const [x, setX] = useState(0)
渲染赋值
setX(5)
并发CM模式
同步不可中断更新机制 -> 异步可中断并行 状态更新 机制
React18 默认开启并发模式
详见代码
- ReactDOM 的引入
import ReactDOM from 'react-dom/client'
- 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
文章来源:https://www.toymoban.com/news/detail-696753.html
其他
如果React 返回一个空组件, React17 只允许返回 null 。React18 也允许返回undefined。文章来源地址https://www.toymoban.com/news/detail-696753.html
到了这里,关于React18 新特性的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!