前端开发

React 18 新特性详解:并发特性与 Suspense

探索 React 18 带来的并发特性、Suspense、自动批处理等新功能,以及它们如何改变我们的开发体验。

MinePage
8 min read
ReactJavaScript前端

React 18 新特性详解


React 18 为我们带来了许多激动人心的特性,其中最重要的是并发特性的引入。本文将深入探讨这些新特性及其对开发体验的影响。


并发特性 (Concurrent Features)


React 18 的核心创新是并发渲染 (Concurrent Rendering)。这意味着 React 可以在处理高优先级更新时中断低优先级更新,然后在适当的时候恢复。


Suspense


Suspense 组件现在支持更多的用例,不仅仅是代码分割,还包括数据获取:


jsx

}>


自动批处理 (Automatic Batching)


在 React 18 中,所有的状态更新都会被自动批处理,即使是在异步函数、Promise、setTimeout 等情况下:


jsx

function handleClick() {

setCount(c => c + 1); // 这不会立即触发重新渲染

setFlag(f => !f); // 这也不会立即触发重新渲染

// React 18 会将这两个更新合并为一次渲染

}


新的 API


startTransition


用于将某些更新标记为非紧急的:


jsx

import { startTransition } from 'react';


function App() {

const [searchTerm, setSearchTerm] = useState('');


function handleSearch(term) {

setSearchTerm(term);


startTransition(() => {

// 非紧急更新

setSearchResults(searchData(term));

});

}

}


useDeferredValue


用于延迟某些值的更新:


jsx

import { useDeferredValue } from 'react';


function SearchResults({ query }) {

const deferredQuery = useDeferredValue(query);

const results = useMemo(() =>

searchItems(deferredQuery), [deferredQuery]

);


return (

    {results.map(item =>

  • {item.text}
  • )}

);

}


迁移指南


从 React 17 升级


1. 更新 React 和 React DOM 到 18 版本

2. 将 `render` 替换为 `createRoot`

3. 可选:启用并发特性


注意事项


- StrictMode 在开发环境中会故意 double-invoke effects

- Suspense 边界现在可以嵌套

- Error boundaries 现在可以捕获 concurrent rendering 中的错误


总结


React 18 的并发特性为构建更流畅的用户界面提供了强大的工具。通过合理使用这些新特性,我们可以创建出响应更快、用户体验更好的应用程序。


虽然这些概念可能需要一些时间来适应,但它们代表了 React 朝着更现代化、更高性能的方向发展。