⊗jsrxPmRDEP 23 of 57 menu

Redux store内の製品データの変更

製品を追加する方法は学びましたが、製品情報を変更したい場合はどうすればよいでしょうか?このレッスンと次回のレッスンで、その方法について見ていきましょう。

製品アプリケーションを開き、ファイル productsSlice.js に移動しましょう。まず、スライス products に対して、製品の更新時に実行される別のreducerを作成する必要があります。これを productUpdated と名付け、reducer productAdded の後の reducers フィールドに追加します。また、reducerが動作するために必要なパラメータ stateaction をすぐに渡します。

reducers: { productAdded(state, action) { state.push(action.payload) }, productUpdated(state, action) {}, },

では、製品を更新するために必要なデータについて考えてみましょう。まず第一に、store内で対象の製品を見つけるために使う id です。残りのデータ、つまり名前、説明、価格、数量は変更用のデータです。これらの値は、actionオブジェクトの payload プロパティから取得します。もし手動で記述するとしたら、以下のようになります。payload プロパティの期待値は単一の引数であるため、ここにはオブジェクトを渡すことに注意してください(これについては後で説明します):

{ type: 'products/productUpdated', payload: {id, name, desc, price, amount} }

主要なポイントを確認したので、productUpdated の中括弧内にコードを記述できます。まず、action オブジェクトから変更されたデータを取得します:

productUpdated(state, action) { const { id, name, desc, price, amount } = action.payload },

次に、取得した id に基づいて、変更が必要な製品を見つけます:

productUpdated(state, action) { const { id, name, desc, price, amount } = action.payload const desiredProduct = state.find(product => product.id === id) },

そのような製品がstore内に見つかった場合、そのデータを新しい値に置き換えます:

productUpdated(state, action) { const { id, name, desc, price, amount } = action.payload const desiredProduct = state.find(product => product.id === id) if (desiredProduct) { desiredProduct.name = name desiredProduct.desc = desc desiredProduct.price = price desiredProduct.amount = amount } },

あとは、コンポーネントで使用するためのaction creatorをエクスポートするだけです。これは createSlice が私たちのために作成してくれます。既存の productAdded と一緒に、ファイルの末尾のエクスポートに追加しましょう:

export const { productAdded, productUpdated } = productsSlice.actions

学生用のアプリケーションを開いてください。レッスンの内容を学んだ後、ファイル studentsSlice.js で、productsSlice のための別のreducerを追加してください。これはユーザーによるデータ変更時にstore内の学生データを更新するものです。これを studentUpdated と名付けてください。

この場合、あなたのactionオブジェクトはどのようになりますか?回答にそのコードを送信してください。

ファイルの末尾で、作成したaction creator studentUpdated をエクスポートしてください。

日本語
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
当サイトでは、サイトの動作、分析、パーソナライゼーションのためにクッキーを使用しています。 データ処理はプライバシーポリシーに従って行われます。
すべて受け入れる 設定 拒否