配列にそれぞれのカウント数を入れて、それをStateで管理している状態です。
カウントの変わった部分のみを再レンダリングしたいのですが、方法が分らず困っています。
react.memoとuseCallbackは試してみたのですが、依存している配列自体は変わっているため、上手くいきませんでした。
下記のプログラムは質問用に組んだものなので軽い処理ですが、実際に使用するものはCounter部分の数が多く処理が重くなっているので、できるだけ再レンダリングは減らしたいです。
はじめての質問ですので、不備などあれば指摘いただけると助かります。
js
1//react 2import React, { useState } from "react"; 3 4const Counter = ({ fruitsName, count, chgCount }) => { 5 return ( 6 <div> 7 <p> 8 {fruitsName}:{count} 9 </p> 10 <button onClick={() => chgCount(count + 1)}>+1</button> 11 </div> 12 ); 13}; 14 15const Sample = () => { 16 const fruits = ["apple", "banana", "coconut", "dragonfruit"]; 17 const [countList, setCountList] = useState(Array(fruits.length).fill(0)); 18 const chgCount = (index, afterCount) => { 19 let afterCountList = [...countList]; 20 afterCountList[index] = afterCount; 21 setCountList(afterCountList); 22 }; 23 return ( 24 <div> 25 {fruits.map((fruitsName, i) => ( 26 <Counter 27 fruitsName={fruitsName} 28 count={countList[i]} 29 chgCount={(afterCount) => chgCount(i, afterCount)} 30 /> 31 ))} 32 </div> 33 ); 34}; 35 36export default Sample; 37
chgCount に渡す関数が毎回作り直されてるから、かな…。

回答1件
あなたの回答
tips
プレビュー