메모리 낭비 문제
src/DiaryItem.js
export default memo(DiaryItem);
const DiaryItem = ({
onRemove,
onEdit,
id,
author,
content,
emotion,
created_date
}) => {
useEffect(() => {
console.log(`${id}번 째 아이템 렌더!`);
});
...
};
useCallback
활용 : dependency array에는 아무것도 전달하지 않은 빈 배열
로 두고, setData를 함수형으로 업데이트
하도록 지시해야 함setData에 전달되는 파라미터
에 최신 state가 전달되는 것이므로 항상 최신 state를 이용하기 위해서 함수형 업데이트의 인자 데이터를 사용
해야 함 (return 부분의 data를 사용해야 최신 state로 업데이트가 가능)src/App.js
const onRemove = useCallback((targetId) => {
setData((data) => data.filter((it) => it.id !== targetId));
}, []);
const onEdit = useCallback((targetId, newContent) => {
setData((data) =>
data.map((it) =>
it.id === targetId ? { ...it, content: newContent } : it
)
);
}, []);