Обзор трех новых API в React 18

Обзор трех новых API в React 18

С выходом React 18 разработчики получили доступ к трем новым API: startTransition, useDeferredValue и useTransition. Эти API призваны улучшить производительность и отзывчивость пользовательского интерфейса в приложениях, построенных на React. В этой статье мы рассмотрим каждое из новых API, их назначение, использование и преимущества.

startTransition

API startTransition позволяет откладывать некоторые обновления состояния в приложении, чтобы не замедлять отклик интерфейса на взаимодействие пользователя. Это особенно полезно при выполнении ресурсоемких операций, таких как обработка больших объемов данных или сложные вычисления.

Функция startTransition принимает в качестве аргумента функцию-обновление, которая будет отложена до тех пор, пока не будет завершено текущее взаимодействие с пользователем. Вот пример использования startTransition:

import { startTransition } from 'react'; function App() { const [query, setQuery] = useState(''); const [results, setResults] = useState([]); const handleQueryChange = (e) => { setQuery(e.target.value); startTransition(() => { const newResults = performExpensiveOperation(e.target.value); setResults(newResults); }); }; return ( <div> <input value={query} onChange={handleQueryChange} /> <ResultsList results={results} /> </div> ); } 

В этом примере при вводе текста в поле ввода функция handleQueryChange сначала обновляет состояние query, а затем вызывает startTransition для отложенного обновления состояния results. Это позволяет пользовательскому интерфейсу оставаться отзывчивым во время выполнения ресурсоемкой операции performExpensiveOperation.

useDeferredValue

Хук useDeferredValue работает в паре с startTransition и позволяет отображать отложенное значение состояния, пока не завершено текущее взаимодействие с пользователем. Это полезно для создания плавных переходов между старым и новым состояниями интерфейса.

Хук useDeferredValue принимает в качестве аргумента значение состояния и возвращает отложенное значение, которое можно использовать для отображения в интерфейсе. Вот пример использования useDeferredValue:

import { useDeferredValue } from 'react'; function SearchResults({ query }) { const deferredQuery = useDeferredValue(query); const results = performExpensiveOperation(deferredQuery); return ( <div> <h2>Search results for "{deferredQuery}"</h2> <ResultsList results={results} /> </div> ); } 

В этом примере компонент SearchResults использует useDeferredValue для получения отложенного значения query. Это значение используется для выполнения ресурсоемкой операции performExpensiveOperation и отображения результатов поиска. Благодаря useDeferredValue отображаемые результаты не будут мгновенно меняться при вводе текста в поле поиска, обеспечивая плавный переход между старыми и новыми результатами.

useTransition

Хук useTransition предоставляет удобный интерфейс для работы с startTransition и useDeferredValue. Он возвращает два значения: функцию для запуска отложенных обновлений и boolean, указывающий, находится ли приложение в состоянии отложенного обновления.

Вот пример использования useTransition:

import { useTransition } from 'react'; function SearchResults({ query }) { const [isPending, startTransition] = useTransition(); const [results, setResults] = useState([]); const handleQueryChange = (e) => { startTransition(() => { const newResults = performExpensiveOperation(e.target.value); setResults(newResults); }); }; return ( <div> <input value={query} onChange={handleQueryChange} /> {isPending ? ( <div>Loading...</div> ) : ( <ResultsList results={results} /> )} </div> ); } 

В этом примере при вводе текста в поле ввода функция handleQueryChange использует startTransition для запуска отложенного обновления состояния results. Переменная isPending указывает, находится ли приложение в состоянии отложенного обновления, и используется для отображения индикатора загрузки или списка результатов.

Читайте также  Яндекс представил генератор случайных чисел

Заключение

Новые API startTransition, useDeferredValue и useTransition в React 18 предоставляют разработчикам мощные инструменты для улучшения производительности и отзывчивости пользовательского интерфейса. С помощью этих API можно откладывать обновления состояния, создавать плавные переходы между старыми и новыми состояниями и управлять отображением индикаторов загрузки. Использование этих API позволяет создавать более плавные и приятные для пользователя интерфейсы, особенно при работе с ресурсоемкими операциями и большими объемами данных.

Дополнительные ресурсы

Советы по созданию сайтов