現在create-react-app環境で簡単なショッピングサイト(アイテム一覧表示、カートへ追加、合計金額の表示)を作ってますが、親コンポーネントの複数要素あるstateを子コンポーネントで個別に変更することができず参っています。
以下のdataset.jsに登録されているitemデータを取得し、各々を表示、値の変更がしたいのですが、うまくいきません。
Reactオンリーでは実装が難しいのか、データ設計の時点で駄目なのか、どうすればよいかご享受願います。
具体的にやりたいことと、うまくいかないことは下に記述します。
やりたいこと(◯はできてます)
- Reactのみの使用(reduxやdbは使わない)
- 各itemの取得と表示◯(mapを使い子コンポーネントに値を渡しreturnしてます)
- 各itemがカートに入れられたかどうかを判定する✗(defaultDatasetのaddedCartのtrue/falseを切り替えたい)
- カート画面でに追加されたitemのみを表示する✗
- カートに追加されたitemの個数と金額をかけ合わせ合計を出す✗(3,4ができればわかる気がします)
私の考えとしてはdefaultDatasetを親コンポーネント(App.jsx)のstateで管理。
子コンポーネント(Items.jsx, Item.jsx)で表示、addedCartやcartCountの値の変更。
子コンポーネント(Cart.jsx)で(App.jsx)のstateを取得しカートに追加されたアイテムと合計金額を表示する。
ということがしたいのですが、やりたいこと3の個別のitemオブジェクトのstateの変更ができません。
javascript
1const dataset = { 2 item: [ 3 { 4 id: 1, 5 name: "スポンジボブソファ", 6 img: bobImg, 7 description: "この椅子を設置したならば気が狂い眠れないでしょう…", 8 price: 9800, 9 // カートに追加されたかどうか 10 addedCart: false, 11 // カートに追加された数 12 cartCount: 0, 13 }, 14 { 15 id: 2, 16 name: "チャッキー", 17 img: chukyImg, 18 description: "Hi Dee Hoo!呪いの挨拶が聞こえたらオワリ", 19 price: 5000, 20 addedCart: false, 21 cartCount: 0, 22 }, 23 ], 24} 25 26//これらのオブジェクトが12個程あります
src/App.jsx, src/components/Main.jsx, src/components/Items.jsx, src/components/Item.jsx, src/components/Cart.jsx, src/dataset.jsx これらのファイルで上記のやりたいことに挑戦しております
実際のソース
質問の意図がわかりにくく面倒な質問かと思われますが、どなたか考え方や解決策・方向性を教えて下さい…。
あなたの回答
tips
プレビュー