
React 18でデータをfetchで取得するコード
Reactでfetchでデータを取得するコードはReact 19より前の古いバージョンでは以下のようなuseEffect, useStateを使用した古い書き方がよく使われています。
App.tsx
import { useEffect, useState } from 'react'
export default function App() {
const [status, setStatus] = useState<string | null>(null)
const [loading, setLoading] = useState(true)
useEffect(() => {
const fetchMessage = async () => {
const res = await fetch('https://dummyjson.com/test?delay=1000')
const data = await res.json()
setStatus(data.status)
setLoading(false)
}
fetchMessage()
}, [])
if (loading) {
return <h1>⌛ Loading status...</h1>
}
return <h1>status: {status}</h1>
}
※ React 18からはSuspenseが使えますが、現在もuseStateを使用しているプロジェクトが結構あります。
ReactでuseEffect, useStateを使用してfetchするサンプル
React 19でデータをfetchで取得するコード
React 19からはuseが使えるので、Suspenseとuseを使えば以下のように完結にfetchのコードが書けます。
App.tsx
import { Suspense, use } from 'react'
const fetchMessage = async () => {
const res = await fetch('https://dummyjson.com/test?delay=1000')
const data = await res.json()
return data.status
}
const statusPromise = fetchMessage()
function Message() {
const status = use(statusPromise)
return <h1>status: {status}</h1>
}
export default function App() {
return (
<Suspense fallback={<h1>⌛ Loading status...</h1>}>
<Message />
</Suspense>
)
}
ReactでSuspense, useを使用してfetchするサンプル
後者のSuspense, useのほうがだいぶシンプルなコードになりました。
ということで、React 19以降はfetchをするときはSuspense, useを使いましょう。