React Suspense: упрощение асинхронной выборки данных
React Suspense — это функция, упрощающая работу с асинхронной выборкой данных в компонентах React. Это позволяет вам приостановить рендеринг компонента до тех пор, пока не будут получены необходимые данные, что помогает уменьшить количество проблем с пользователем и повысить производительность приложения. В этой статье мы углубимся в то, что такое React Suspense, как он работает и как использовать его в своем приложении для упрощения выборки данных.
Что такое React Suspense?
React Suspense — это новая функция React, которая позволяет компонентам приостанавливать рендеринг, чтобы дождаться завершения определенной операции, например загрузки данных. React Suspense работает, выдавая обещание, возвращаемое компонентом. React возьмет на себя рендеринг компонента и будет отображать резервный пользовательский интерфейс, пока данные не будут разрешены. React Suspense также координирует загрузку данных с сервера и показывает результат, когда он будет готов.
Как использовать саспенс
React Suspense можно использовать в компонентах, выполняющих асинхронный рендеринг данных. Вы можете использовать его как альтернативу методу жизненного цикла componentDidMount
или хуку useEffect
. Саспенс требует двух вещей: компонента Suspense
и компонента lazy
.
import React, { Suspense, lazy } from "react"; const LazyComponent = lazy(() => import("./LazyComponent")); function App() { return ( <div> <Suspense fallback={<div>Loading...</div>}> <LazyComponent /> </Suspense> </div> ); }
В приведенном выше примере LazyComponent
— это компонент, который загружается лениво. Свойство fallback
компонента Suspense
— это то, что отображается пользователю во время извлечения компонента.
Подходы к выборке данных
Есть несколько подходов, которые вы можете использовать при использовании выборки данных с помощью React Suspense. Ниже мы рассмотрим три наиболее распространенных подхода.
Выборка при рендеринге
Подход «Выборка при рендеринге» — это самый простой способ использовать React Suspense для выборки данных. В этом подходе вы выполняете выборку данных в функции рендеринга вашего компонента. Таким образом, данные становятся доступными сразу после рендеринга компонента. Вот пример:
import React, { Suspense } from "react"; function LazyComponent() { const data = fetchDataFromAPI(); // synchronous call return <div>{data}</div>; } function App() { return ( <div> <Suspense fallback={<div>Loading...</div>}> <LazyComponent /> </Suspense> </div> ); }
Выборка, затем визуализация
В этом подходе вы извлекаете данные, когда компонент монтируется, а затем визуализируете компонент. При таком подходе компонент не будет отображаться до тех пор, пока не будут доступны данные.
import React, { Suspense } from "react"; function LazyComponent() { const [data, setData] = useState(null); useEffect(() => { fetchDataFromAPI().then(response => setData(response)); }, []); return <div>{data}</div>; } function App() { return ( <div> <Suspense fallback={<div>Loading...</div>}> <LazyComponent /> </Suspense> </div> ); }
Рендеринг по мере извлечения
Render-as-you-fetch — это метод, при котором вы передаете компоненту Suspense объект, содержащий ваши ответы Promise. Вы можете использовать данные из промисов, как только они станут доступны.
import React, { Suspense } from "react"; function LazyComponent({ responses }) { const data = responses[0].data; return <div>{data}</div>; } function App() { const promises = [fetchDataFromAPI()]; // an array of promises return ( <div> <Suspense fallback={<div>Loading...</div>}> <LazyComponent responses={promises} /> </Suspense> </div> ); }
Заключение
React Suspense — это мощный инструмент для асинхронной выборки данных в приложениях React. Это позволяет легко и эффективно обрабатывать загрузку данных и координировать представление с готовыми данными. Кроме того, с помощью Suspense вы можете создавать отличные пользовательские интерфейсы с минимальным количеством кода. Мы надеемся, что эта статья поможет вам начать работу с Suspense и повысить производительность вашего приложения.