- Publicado el
Entendiendo React.Suspense
- Autores

- Nombre
- Marcelo Carmona
- @carmonamarcelo
Esta es una nueva característica que nos permite "detener" un render hasta que hayamos terminado una tarea (por ejemplo, cargar datos desde una API).
Vamos a buscar una tarea cuando el componente Task esté montado y guardaremos el resultado en una caché muy simple. La parte interesante que hay que entender es que, cuando lanzamos una promesa, esta es atrapada por Suspense y muestra un estado de carga hasta que la promesa se resuelve.
import React, { Suspense } from 'react'
import ReactDOM from 'react-dom'
import './styles.css'
function fetchFirstTask() {
return fetch('https://jsonplaceholder.typicode.com/todos/1').then((response) => response.json())
}
let cache = null
function Task() {
if (!cache) {
throw fetchFirstTask().then((task) => (cache = task))
}
return (
<div>
{cache.completed ? '✅' : '⛔️'} {cache.title}
</div>
)
}
function App() {
return (
<div className="App">
<h1>My task</h1>
<Suspense fallback={<div>Loading...</div>}>
<Task />
</Suspense>
</div>
)
}
A veces tenemos una conexión rápida y el recurso se carga muy rápidamente. En este caso, tal vez no sea necesario mostrar un estado de carga, por lo que podemos usar maxDuration para evitar este parpadeo extraño.
<Suspense maxDuration={400} fallback={<div>Loading...</div>}>
<Task />
</Suspense>