Capítulo 353 de 456
Renderização inteiramente no browser: HTML mínimo baixado, JS busca e monta o DOM. No Pages Router, usada via useEffect ou (recomendado) uma lib de data fetching como SWR/TanStack Query.
useEffect para fetch: padrão manual, mais visto em apps React antigos.import React, { useState, useEffect } from 'react'
export function Page() {
const [data, setData] = useState(null)
useEffect(() => {
const fetchData = async () => {
const response = await fetch('https://api.example.com/data')
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`)
}
const result = await response.json()
setData(result)
}
fetchData().catch((e) => console.error('An error occurred while fetching the data: ', e))
}, [])
return <p>{data ? `Your data: ${data}` : 'Loading...'}</p>
}
useEffect, mostrando estado de loading.import useSWR from 'swr'
export function Page() {
const { data, error, isLoading } = useSWR('https://api.example.com/data', fetcher)
if (error) return <p>Failed to load.</p>
if (isLoading) return <p>Loading...</p>
return <p>Your Data: {data}</p>
}
useEffect manual por causa de cache, revalidação e updates otimistas.loading.js) resolve o problema de estado de loading de forma nativa.