ショッピングカートにある商品の一覧表を表示するため、Reactの関数型コンポーネントをつかってみました。
商品(item)の価格(item#price)の合計も同時に取得したいので、
mapでItemsをループで表示し、関数で合計値を計算するようにしました。
最初は逐一stateにいれていくようにしたのですが、reactの非同期処理をmap内で扱うとエラーがでました。
ググってみるとまずは同期処理で小計を得てその後にstateにいれるとよいとありました。
以下のようにしましたが、途中まできちんと合計されていくのですが、ループ終了後値をみると0になっています。
スコープの問題なのでしょうか、ではどこでこの値を取得すればよいのでしょうか。
js
1 2function ItemsList(props) { 3 let subtotal = 0 4 5 function updateSubtotal(price) { 6 subtotal += price 7 return subtotal 8 } 9 return ( 10 <React.Fragment> 11 {items.map(item => { 12 return <Item 13 key={item.id} 14 updateSubtotal={updateSubtotal} 15 />; 16 })} 17 {subtotal} // 0と表示されてしまう。 18 {updateSubtotal} // 当然ですがこれも0と表示されてしまう。 19 20 </React.Fragment> 21 ); 22} 23 24 25function Item(props) { 26 const {updateSubtotal} = props 27 return ( 28 <React.Fragment> 29 <tr> 30 <td className="text-center">{item.name}</td> 31 <td className="text-center">{updateSubtotal(item.price) } 円</td> 32 </tr> 33 </React.Fragment> 34 ) 35} 36
ご教示いただけませんでしょうか。
何卒よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。