
useActionStateに関数を渡す方法【React 19 Server Actions対応】
2025.2.7
この記事は約2分で読めます

筆者:三好アキ(専門用語なしでプログラミング)
▶︎ 三好アキの著書一覧はこちら
useActionStateの関数の位置
Reactバージョン19(2024年12月安定版リリース)で導入されたuseActionStateに渡す関数は、次のようにfunctionを使った記法にすると、useActionStateよりも後(下部)に書くことができます。
import { useActionState } from "react"
const App = () => {
const[state, getDataAction, isPending] = useActionState(getData, "")
async function getData(prevState, formData){
...
}
return (
<form action={getDataAction}>
...
</form>
)
}
export default Appfunctionを使った記法(=関数宣言)には巻き上げがあるため、それよりも前に利用可能なのです。
以下、もう少し具体的に見ていきましょう。
useStateをuseActionStateで置き換える
次のようなベーシックなReactのコードを考えてみます。
「phone」や「car」といったデータを送ってダミーのJSONデータを取得するコードです。
import { useState } from "react"
const App = () => {
const [data, setData] = useState("")
const [result, setResult] = useState("")
const getData = async(e) => {
e.preventDefault()
const response = await fetch(`https://dummyjson.com/products/search?q=${data}`)
const jsonData = await response.json()
setResult(jsonData)
}
return (
<form onSubmit={getData}>
<input type="text" onChange={(e) => setData(e.target.value)}/>
<button>送信</button>
</form>
)
}
export default AppuseActionStateを使うと、次のように書き換えられます。
import { useActionState } from "react"
const App = () => {
const getData = async(prevState, formData) => {
const data = formData.get("random")
const response = await fetch(`https://dummyjson.com/products/search?q=${data}`)
const jsonData = await response.json()
return jsonData
}
const[state, getDataAction, isPending] = useActionState(getData, "")
return (
<form action={getDataAction}>
<input type="text" name="random"/>
<button>送信</button>
</form>
)
}
export default App関数の記法を「const」から「function」に変える
useActionStateはgetDataの下部に書かれています。
const...を使った記法では、それよりも前に利用ができないからです。
しかしuseActionStateでuseStateを置き換えた経緯を考えると、useStateと同じ位置にuseActionStateを書きたいとも感じます。
その時は次のように、const...で始まる記法をfunctionを使った記法に書き換えましょう。
// 変更前
const getData = async(prevState, formData) => {...
// 変更後
async function getData(prevState, formData){...すると、useActionStateを次のように上部に書けます。
import { useActionState } from "react"
const App = () => {
const[state, getDataAction, isPending] = useActionState(getData, "")
async function getData(prevState, formData){
const data = formData.get("random")
const response = await fetch(`https://dummyjson.com/products/search?q=${data}`)
const jsonData = await response.json()
return jsonData
}
return (
<form action={getDataAction}>
<input type="text" name="random"/>
<button>送信</button>
</form>
)
}
export default Appconst...で始まる記法(=関数式)では、それよりも前に関数を利用できません。
一方でfunctionを使った記法(=関数宣言)ではそれが可能なため、getDataよりも前にuseActionStateを書けます。

✤ 筆者 ✤
三好アキ(専門用語なしでプログラミング)
「専門用語なし」のメソッドで1,200人以上のビギナーをフロントエンド開発入門に成功させる。翔泳社『動かして学ぶ!Next.js/React開発入門』(韓国でも出版)など著書25冊以上。Amazonベストセラー1位複数回獲得。
React、Next.js、TypeScriptなどの最新情報や初心者向けコンテンツを、無料メルマガ配信中。メールアドレスだけで登録可 ▶︎ 無料メルマガ登録