⊗jsrxPmATRS 50 of 57 menu

Reduxにおけるリクエストステータスの活用

前回のレッスンでは、追加のリデューサーを使って、fetchProductsがリクエスト時にpendingfulfilledrejectedアクションをディスパッチした場合のアプリケーションの動作を定義しました。これで、データの読み込みが現在どの段階にあるかをユーザーに表示できるようになりました。

商品アプリケーションを開き、ファイルProductsList.jsxを開きましょう。まず最初に、商品カード用の独立したコンポーネントProductCardを作成します。これは、ProductsList関数の前、インポート文の直後に行います。プロパティとしてproductを渡します:

const ProductCard = ({ product }) => { return () }

次に、returnの空の丸括弧内に、dispProductsから商品データを表示するためのすべてのコードを移動させます:

const ProductCard = ({ product }) => { return ( <div key={product.id} className="product-excerpt"> <h3>{product.name}</h3> <SellerOfProd sellerId={product.seller} /> <p>{product.desc.substring(0, 100)}</p> <UserReactions product={product} /> <Link to={`/products/${product.id}`} className="link-btn"> view </Link> </div> ) }

そして、ProductsList内の残りのコード行を削除します。これはもう必要ありません:

const dispProducts = products.map((product) => ())

次に、ProductsList関数のコードの先頭で、さらに2つの変数errorcontentを用意します。1つ目はエラーのための変数、2つ目はリクエストステータスに応じてさまざまなコンテンツを書き込むための変数です。これはconst dataFetch = useRef(false)の前で行います:

const error = useSelector((state) => state.products.error) let content

次に、ProductsListコンポーネントのreturnコマンドの前に、ステータスに応じてcontentにさまざまなコンテンツが入力される条件を記述したコードブロックを書きます。まず、リクエストが送信されたときのステータス'in progress'について記述します。この場合、ユーザーにデータの読み込み中であることを通知します:

if (productStatus === 'in progress') { content = <p>商品リストを読み込み中...</p> }

もし読み込みが成功した場合(私たちはこれを'success'と表現しました)、取得した商品のリストを表示する必要があります。ProductCardコンポーネントを使用してmap内に表示し、プロパティとしてproductを渡します:

if (productStatus === 'in progress') { content = <p>商品リストを読み込み中...</p> } else if (productStatus === 'success') { content = products.map((product) => ( <ProductCard key={product.id} product={product} /> )) }

そして最後のステータス、それは'fail'です。これも追加します。ここでは、先ほどステートからエラーを書き込んだ変数errorを使用します:

if (productStatus === 'in progress') { content = <p>商品リストを読み込み中...</p> } else if (productStatus === 'success') { content = products.map((product) => ( <ProductCard key={product.id} product={product} /> )) } else if (productStatus === 'fail') { content = <div>{error}</div> }

そして最後のステップとして、returnのためのコードブロック内で、古い{dispProducts}{content}に置き換えます。

アプリケーションを起動し、メニューで'Products'をクリックしてください。すべてが動作します。サーバーで設定したとおり、約2秒間、商品追加フォームの下に'Products list loading ...'というメッセージが表示され、その後商品リストが表示されるのがわかります。

学生アプリケーションを開いてください。その中のファイルStudentsList.jsxを開いてください。その中に新しいコンポーネントStudentCardを作成してください。レッスンで示したように、dispStudentsからコードを移動させてください。

StudentsList関数内に変数errorcontentを作成してください。リクエストステータスに応じて、変数contentにコンテンツを割り当ててください。返されるレイアウト内で古いdispStudentscontentに置き換えることを忘れないでください。

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