⊗jsrxPmATDT 54 of 57 menu

ReduxにおけるThunkを使用したデータ送信

前回のレッスンでは、偽のサーバーでのPOSTリクエストの処理について学びました。 では、サーバーにリクエストを送信するthunk関数を書いてみましょう。

製品管理アプリケーションを開き、その中のファイルproductsSlice.jsを開きます。 次に、thunk fetchProductsの後で、 createAsyncThunkを使用してthunk addProductを作成します:

export const addProduct = createAsyncThunk()

createAsyncThunkの最初のパラメータとして 'products/addProduct'を渡し、2番目のパラメータとして 新しい製品のデータオブジェクトを受け取る非同期コールバックを渡します:

export const addProduct = createAsyncThunk( 'products/addProduct', async (newProduct) => {} )

このコールバックのコード内で、クライアントを呼び出し、 パスと製品オブジェクトをパラメータとして渡し、 応答データを返します:

export const addProduct = createAsyncThunk( 'products/addProduct', async (newProduct) => { const response = await client.post('/fakeServer/products', newProduct) return response.data } )

次に、コードの下の方で、productsSlicereducersフィールドを見てみましょう。 以前は、reducerメソッドとprepareメソッドを持つ productAddedレデューサーを使用して新しい製品を追加していました。 現在はサーバーで必要なデータを生成し、thunkを扱っているため、 ここから完全にレデューサーproductAddedをコードから削除します。 その後、extraReducersメソッド(そのコードの末尾)に、 もう1つの追加レデューサーを加えます。このレデューサーは、 リクエストが成功した場合、アクションのpayloadから 直接productsスライスに新しい製品を追加します (このようなコードが可能なのは、唯一無二の createSliceのおかげであることを覚えておいてください):

.addCase(addProduct.fulfilled, (state, action) => { state.products.push(action.payload) })

そうそう、忘れずにインポート行からnanoidを削除し、 ファイル末尾のエクスポートアクションからproductAddedを削除してください。

学生管理アプリケーションを開いてください。 その中のファイルstudentsSlice.jsを開きます。 createAsyncThunkを使用して、レッスンで示したように 新しい学生を追加するためにサーバーにPOSTリクエストを送信する 別のthunk addStudentを作成してください。

次に、下の方でstudentsSliceに変更を加えます: reducersプロパティ内のレデューサーstudentAddedを完全に削除します。 そして、extraReducersフィールドに、レッスンで示したように、 リクエストが成功した場合にアクションのpayloadから studentsスライスに新しい学生を追加する追加レデューサーを加えます。

日本語
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItalianoქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
当サイトでは、サイトの動作、分析、パーソナライゼーションのためにクッキーを使用しています。 データ処理はプライバシーポリシーに従って行われます。
すべて受け入れる 設定 拒否