⊗jsrxPmRDEF 24 of 57 menu

Reduxにおけるデータ編集フォーム

これで、store内のデータを変更するためのレデューサーができました。 このレッスンでは、製品データを編集できるフォームを作成します。

製品管理アプリケーションを開き、productsフォルダ内に EditProductForm.jsxファイルを作成しましょう。 EditProductFormコンポーネントの作成は、 NewProductFormと同様ですが、いくつか異なる点があり、 それらについて説明します。したがって、 NewProductForm.jsxのコードをすべてコピーして、 作成したファイルEditProductForm.jsxに貼り付けてください。 それでは順を追って進めていきましょう。

インポートからnanoidを削除してください。ここではidを生成する必要はありません。 productAddedのインポートをproductUpdatedに置き換えてください。 ここでは、製品を追加するのではなく、更新するためのアクションを使用するからです。

次に、コンポーネント関数の名前をNewProductFormから EditProductFormに変更します。

EditProductForm関数内でnamedescpriceamountのローカルステートを設定する前に、 さらに数行のコードを追加しましょう。先ほど述べたように、 ここではidを生成する必要はありません。現在のタスクは、 編集対象の製品データからidを取得することです。 製品個別ページを作成したときにも同様のことを行いました。 では、useParamsフックを使用してidを取得し、 useSelectorフックを使用して必要な製品を見つけましょう (ファイルの先頭で両方のフックをインポートすることを忘れないでください):

let params = useParams() const { productId } = params const product = useSelector((state) => state.products.find((product) => product.id === productId) )

その後、ローカルステートの宣言ブロックを変更します。 今回は、storeから取得した製品データを初期値として設定する必要があります。 最初のステートは次のようになります。残り3つも同じように変更してください:

const [name, setName] = useState(product.name)

useDispatchの変数を割り当てた後、 さらに一行コードを追加しましょう。今度はuseNavigateフックのためです。 ユーザーがフォームへの変更を保存した後、製品ページに戻るためにこれを使用します:

const navigate = useNavigate()

また、このフックをファイルの先頭でインポートします:

import { useNavigate, useParams } from 'react-router-dom'

次に、入力フィールドのハンドラーがあります。 その後、onSaveProductClick関数を修正する必要があります。 今回は、クリック時にproductUpdatedアクションを、 取得したidとオブジェクト形式の変更されたデータと共にディスパッチします。 その後、編集された製品のページに遷移するためにnavigateを追加します:

const onSaveProductClick = () => { if (name && desc && price && amount) { dispatch( productUpdated({ id: productId, name, desc, price, amount, }) ); navigate(`/products/${productId}`); } }

あとは、返されるJSX内の次の行を見つけるだけです:

<h2>Add a New Product</h2>

そして、次のように置き換えます:

<h2>Edit Product</h2>

生徒管理アプリケーションを開いてください。 NewStudentForm.jsxを参考に、EditStudentForm.jsxファイルを作成してください。 レッスンで示した通りに変更を加えてください。

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