1
1
---
2
- source-updated-at : 2025-06-01T01:32:20 .000Z
3
- translation-updated-at : 2025-06-02T20:01:14.188Z
4
- title : データの更新方法
2
+ source-updated-at : 2025-06-03T15:30:49 .000Z
3
+ translation-updated-at : 2025-06-06T16:36:21.895Z
4
+ title : データ更新方法
5
5
nav_title : データ更新
6
- description : Next.jsアプリケーションでデータを更新する方法について学びましょう 。
6
+ description : Next.jsアプリケーションでデータを更新する方法について学びます 。
7
7
related :
8
8
title : APIリファレンス
9
- description : このページで紹介されている機能について詳しく知るには、APIリファレンスをお読みください 。
9
+ description : このページで言及されている機能について詳しく知るにはAPIリファレンスを参照してください 。
10
10
links :
11
11
- app/api-reference/functions/revalidatePath
12
12
- app/api-reference/functions/revalidateTag
@@ -15,36 +15,36 @@ related:
15
15
16
16
Next.jsではReactの[ サーバー関数 (Server Functions)] ( https://react.dev/reference/rsc/server-functions ) を使用してデータを更新できます。このページでは[ サーバー関数の作成] ( #creating-server-functions ) と[ 呼び出し] ( #invoking-server-functions ) 方法について説明します。
17
17
18
- ## サーバー関数
18
+ ## サーバー関数 (Server Functions)
19
19
20
- サーバー関数とは、サーバー上で実行される非同期関数です。サーバー関数はクライアントからネットワークリクエスト経由で呼び出されるため、本質的に非同期です 。` action ` の一部として呼び出される場合、** サーバーアクション (Server Actions)** とも呼ばれます。
20
+ サーバー関数はサーバー上で実行される非同期関数です。クライアントからネットワークリクエスト経由で呼び出されるため、サーバー関数は本質的に非同期です 。` action ` の一部として呼び出される場合、** サーバーアクション (Server Actions)** とも呼ばれます。
21
21
22
- 慣例として、` action ` は` startTransition ` に渡される非同期関数です。サーバー関数は以下の場合に自動的に` startTransition ` でラップされます:
22
+ 慣例として、` action ` は` startTransition ` に渡される非同期関数です。サーバー関数は以下の場合に自動的に` startTransition ` でラップされます:
23
23
24
24
- ` <form> ` の` action ` プロパティに渡された場合
25
25
- ` <button> ` の` formAction ` プロパティに渡された場合
26
26
- ` useActionState ` に渡された場合
27
27
28
28
## サーバー関数の作成
29
29
30
- サーバー関数は[ ` use server ` ] ( https://react.dev/reference/rsc/use-server ) ディレクティブを使用して定義できます。このディレクティブを ** 非同期** 関数の先頭に配置して関数をサーバー関数としてマークするか、別ファイルの先頭に配置してそのファイルのすべてのエクスポートをマークできます 。
30
+ サーバー関数は[ ` use server ` ] ( https://react.dev/reference/rsc/use-server ) ディレクティブを使用して定義できます。ディレクティブを ** 非同期** 関数の先頭に配置して関数をサーバー関数としてマークするか、ファイルの先頭に配置してそのファイルのすべてのエクスポートをマークできます 。
31
31
32
32
``` ts filename="app/lib/actions.ts" switcher
33
33
export async function createPost(formData : FormData ) {
34
34
' use server'
35
35
const title = formData .get (' title' )
36
36
const content = formData .get (' content' )
37
37
38
- // データを更新
39
- // キャッシュを再検証
38
+ // データ更新
39
+ // キャッシュ再検証
40
40
}
41
41
42
42
export async function deletePost(formData : FormData ) {
43
43
' use server'
44
44
const id = formData .get (' id' )
45
45
46
- // データを更新
47
- // キャッシュを再検証
46
+ // データ更新
47
+ // キャッシュ再検証
48
48
}
49
49
```
50
50
@@ -54,22 +54,22 @@ export async function createPost(formData) {
54
54
const title = formData .get (' title' )
55
55
const content = formData .get (' content' )
56
56
57
- // データを更新
58
- // キャッシュを再検証
57
+ // データ更新
58
+ // キャッシュ再検証
59
59
}
60
60
61
61
export async function deletePost (formData ) {
62
62
' use server'
63
63
const id = formData .get (' id' )
64
64
65
- // データを更新
66
- // キャッシュを再検証
65
+ // データ更新
66
+ // キャッシュ再検証
67
67
}
68
68
```
69
69
70
- ### サーバーコンポーネント
70
+ ### サーバーコンポーネント (Server Components)
71
71
72
- サーバー関数はサーバーコンポーネント内にインラインで定義できます。 関数本体の先頭に` "use server" ` ディレクティブを追加します:
72
+ サーバーコンポーネント内では、 関数本体の先頭に` "use server" ` ディレクティブを追加することでサーバー関数をインラインで定義できます:
73
73
74
74
``` tsx filename="app/page.tsx" switcher
75
75
export default function Page() {
@@ -95,9 +95,9 @@ export default function Page() {
95
95
}
96
96
```
97
97
98
- ### クライアントコンポーネント
98
+ ### クライアントコンポーネント (Client Components)
99
99
100
- クライアントコンポーネント内でサーバー関数を定義することはできません 。ただし、` "use server" ` ディレクティブがファイル先頭にあるファイルからインポートすることで、クライアントコンポーネント内で呼び出すことができます:
100
+ クライアントコンポーネントでサーバー関数を定義することはできません 。ただし、` "use server" ` ディレクティブが先頭にあるファイルからインポートすることで、クライアントコンポーネントで呼び出すことができます:
101
101
102
102
``` ts filename="app/actions.ts" switcher
103
103
' use server'
@@ -133,16 +133,16 @@ export function Button() {
133
133
134
134
## サーバー関数の呼び出し
135
135
136
- サーバー関数を呼び出す主な方法は2つあります:
136
+ サーバー関数を呼び出す主な方法は2つあります:
137
137
138
- 1 . サーバー/クライアントコンポーネント内の [ フォーム] ( #forms )
139
- 2 . クライアントコンポーネント内の [ イベントハンドラー ] ( #event-handlers )
138
+ 1 . サーバー/クライアントコンポーネントでの [ フォーム] ( #forms ) 使用
139
+ 2 . クライアントコンポーネントでの [ イベントハンドラ ] ( #event-handlers ) 使用
140
140
141
141
### フォーム
142
142
143
143
ReactはHTMLの[ ` <form> ` ] ( https://react.dev/reference/react-dom/components/form ) 要素を拡張し、HTMLの` action ` プロパティでサーバー関数を呼び出せるようにしています。
144
144
145
- フォーム内で呼び出された場合 、関数は自動的に[ ` FormData ` ] ( https://developer.mozilla.org/docs/Web/API/FormData/FormData ) オブジェクトを受け取ります。ネイティブの[ ` FormData ` メソッド] ( https://developer.mozilla.org/en-US/docs/Web/API/FormData#instance_methods ) を使用してデータを抽出できます:
145
+ フォームで呼び出された場合 、関数は自動的に[ ` FormData ` ] ( https://developer.mozilla.org/docs/Web/API/FormData/FormData ) オブジェクトを受け取ります。ネイティブの[ ` FormData ` メソッド] ( https://developer.mozilla.org/en-US/docs/Web/API/FormData#instance_methods ) を使用してデータを抽出できます:
146
146
147
147
``` tsx filename="app/ui/form.tsx" switcher
148
148
import { createPost } from ' @/app/actions'
@@ -179,8 +179,8 @@ export async function createPost(formData: FormData) {
179
179
const title = formData .get (' title' )
180
180
const content = formData .get (' content' )
181
181
182
- // データを更新
183
- // キャッシュを再検証
182
+ // データ更新
183
+ // キャッシュ再検証
184
184
}
185
185
```
186
186
@@ -191,16 +191,16 @@ export async function createPost(formData) {
191
191
const title = formData .get (' title' )
192
192
const content = formData .get (' content' )
193
193
194
- // データを更新
195
- // キャッシュを再検証
194
+ // データ更新
195
+ // キャッシュ再検証
196
196
}
197
197
```
198
198
199
- > ** 豆知識 ** : ` action ` プロパティに渡された場合、サーバー関数は_サーバーアクション_とも呼ばれます 。
199
+ > ** 補足: ** ` action ` プロパティに渡された場合、サーバー関数は_サーバーアクション (Server Actions) _ とも呼ばれます 。
200
200
201
- ### イベントハンドラー
201
+ ### イベントハンドラ
202
202
203
- ` onClick ` などのイベントハンドラーを使用して、クライアントコンポーネント内でサーバー関数を呼び出すことができます 。
203
+ クライアントコンポーネントでは ` onClick ` などのイベントハンドラを使用してサーバー関数を呼び出せます 。
204
204
205
205
``` tsx filename="app/like-button.tsx" switcher
206
206
' use client'
@@ -252,25 +252,25 @@ export default function LikeButton({ initialLikes }) {
252
252
}
253
253
```
254
254
255
- ## 例
255
+ ## 使用例
256
256
257
- ### 保留状態の表示
257
+ ### 処理中状態の表示
258
258
259
- サーバー関数の実行中 、Reactの[ ` useActionState ` ] ( https://react.dev/reference/react/useActionState ) フックを使用してローディングインジケーターを表示できます 。このフックは` pending ` ブール値を返します:
259
+ サーバー関数の実行中は 、Reactの[ ` useActionState ` ] ( https://react.dev/reference/react/useActionState ) フックを使用してローディングインジケータを表示できます 。このフックは` pending ` ブール値を返します:
260
260
261
261
``` tsx filename="app/ui/button.tsx" switcher
262
262
' use client'
263
263
264
- import { useActionState } from ' react'
264
+ import { useActionState , startTransition } from ' react'
265
265
import { createPost } from ' @/app/actions'
266
266
import { LoadingSpinner } from ' @/app/ui/loading-spinner'
267
267
268
268
export function Button() {
269
269
const [state, action, pending] = useActionState (createPost , false )
270
270
271
271
return (
272
- <button onClick = { async () => action ( )} >
273
- { pending ? <LoadingSpinner /> : ' 投稿を作成 ' }
272
+ <button onClick = { () => startTransition ( action )} >
273
+ { pending ? <LoadingSpinner /> : ' 投稿作成 ' }
274
274
</button >
275
275
)
276
276
}
@@ -279,31 +279,31 @@ export function Button() {
279
279
``` jsx filename="app/ui/button.js" switcher
280
280
' use client'
281
281
282
- import { useActionState } from ' react'
282
+ import { useActionState , startTransition } from ' react'
283
283
import { createPost } from ' @/app/actions'
284
284
import { LoadingSpinner } from ' @/app/ui/loading-spinner'
285
285
286
286
export function Button () {
287
287
const [state , action , pending ] = useActionState (createPost, false )
288
288
289
289
return (
290
- < button onClick= {async () => action ( )}>
291
- {pending ? < LoadingSpinner / > : ' 投稿を作成 ' }
290
+ < button onClick= {() => startTransition (action )}>
291
+ {pending ? < LoadingSpinner / > : ' 投稿作成 ' }
292
292
< / button>
293
293
)
294
294
}
295
295
```
296
296
297
297
### キャッシュの再検証
298
298
299
- 更新を実行した後、サーバー関数内で[ ` revalidatePath ` ] ( /docs/app/api-reference/functions/revalidatePath ) または[ ` revalidateTag ` ] ( /docs/app/api-reference/functions/revalidateTag ) を呼び出すことでNext.jsのキャッシュを再検証し、更新されたデータを表示できます:
299
+ 更新を実行した後、サーバー関数内で[ ` revalidatePath ` ] ( /docs/app/api-reference/functions/revalidatePath ) または[ ` revalidateTag ` ] ( /docs/app/api-reference/functions/revalidateTag ) を呼び出すことでNext.jsのキャッシュを再検証し、更新されたデータを表示できます:
300
300
301
301
``` ts filename="app/lib/actions.ts" switcher
302
302
import { revalidatePath } from ' next/cache'
303
303
304
304
export async function createPost(formData : FormData ) {
305
305
' use server'
306
- // データを更新
306
+ // データ更新
307
307
// ...
308
308
309
309
revalidatePath (' /posts' )
@@ -315,23 +315,23 @@ import { revalidatePath } from 'next/cache'
315
315
316
316
export async function createPost (formData ) {
317
317
' use server'
318
- // データを更新
318
+ // データ更新
319
319
// ...
320
320
revalidatePath (' /posts' )
321
321
}
322
322
```
323
323
324
324
### リダイレクト
325
325
326
- 更新後にユーザーを別のページにリダイレクトしたい場合があります。サーバー関数内で[ ` redirect ` ] ( /docs/app/api-reference/functions/redirect ) を呼び出すことでこれを行えます:
326
+ 更新後にユーザーを別のページにリダイレクトしたい場合があります。サーバー関数内で[ ` redirect ` ] ( /docs/app/api-reference/functions/redirect ) を呼び出すことで実現できます:
327
327
328
328
``` ts filename="app/lib/actions.ts" switcher
329
329
' use server'
330
330
331
331
import { redirect } from ' next/navigation'
332
332
333
333
export async function createPost(formData : FormData ) {
334
- // データを更新
334
+ // データ更新
335
335
// ...
336
336
337
337
redirect (' /posts' )
@@ -344,7 +344,7 @@ export async function createPost(formData: FormData) {
344
344
import { redirect } from ' next/navigation'
345
345
346
346
export async function createPost (formData ) {
347
- // データを更新
347
+ // データ更新
348
348
// ...
349
349
350
350
redirect (' /posts' )
0 commit comments