reactでECサイトのポートフォリオを作成しています。
商品一覧ページで商品名をクリックしたら商品詳細ページに飛ぶようにしようと考えています。
以下のように実装したところ商品詳細ページに飛んだ時にエラーが出てしまいます。
コンソールログで確認したところpropsの形で渡したdocがうまく読み込めていないようです。
どのようにすればリンク先にpropsを渡すことができるでしょうか?
react
1import React,{useState} from "react"; 2import {Link} from "react-router-dom"; 3import PageButton from "./PageButton"; 4 5export default function GameInfo(props){ 6 const [count, setCount] = useState(0); 7 return( 8 <div> 9 <ul> 10 <div className="game-container"> 11 {props.gameDoc.slice(count*10, count*10+10).map((doc, index) => 12 <li className="game-image" key={index} style={{marginBottom:"30px", display:"flex"}}> 13 <img src={doc.photo} alt="not image" height="220px" width="330px"/> 14 <div className="game-info" style={{marginLeft:"30px"}}> 15 {/*ここのリンクについて質問*/} 16 <Link to="/Detail" game={doc}><h1>{doc.name}</h1></Link> 17 <p>price: ¥{doc.price}</p> 18 </div> 19 </li>) 20 } 21 </div> 22 </ul> 23 <PageButton gameDoc={props.gameDoc} count={count} setCount={setCount}/> 24 </div> 25 ) 26}
リンク先のページ(Detail)のコンソールログでprops.gameがundefinedとなっているためpropsで渡したdocがうまく読み込めていないと考えております。
Detail
1import React from "react"; 2import {Button} from "@material-ui/core"; 3 4function Detail(props) { 5 console.log(props.game); 6 return ( 7 <div> 8 <img src={props.game.photo} alt="not image" /> 9 <h1>{props.game.name}</h1> 10 <p>{props.game.detail}</p> 11 <p>{props.game.category}</p> 12 <p>{props.game.price}</p> 13 </div> 14 ); 15} 16export default Detail;
Link タグには game={doc} などの余分なものは追加できないので、to={"/Detail/" + doc.id} みたいにする必要があるかと。
なるほどです。現在データベースに69個の商品を保存してあるのですが、この場合69個分Detail/doc.idのページを作成する必要があるということですか?
<Route path="/Detail/:id"> みたいに書けば id を受け取れるはず。
https://qiita.com/10mi8o/items/67d5479da6dcc9c4e697#url%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF
ありがとうございます!
試してみてみます。
回答1件
あなたの回答
tips
プレビュー