Next
하나의 useState 이용한 숫자변경. (각자따로.)
하림회사
2023. 5. 26. 23:03
'use client'
/* eslint-disable @next/next/no-img-element */
import Image from "next/image"
import food from '/public/food0.png'
import { useState } from 'react';
const List = () => {
let itemCoo = ['Tomatoes', 'Pasta', 'Coconut', '김치찌게'];
const [itemNum, setItemNum] = useState<Record<number, number>>({});
const increaseItemNum = (index: number) => {
setItemNum((prevItemNum) => ({
...prevItemNum, // 스테이값을 전체 복사. 현재 ({0,0,0,0})
// prevItemNum 는 스테이트 객체안의 모든값.
[index]: prevItemNum[index] ? prevItemNum[index] + 1 : 1,
//[index] {} 객체의 몇번재값
}));
};
const decreaseItemNum = (index: number) => {
setItemNum((prevItemNum) => ({
...prevItemNum,
[index]: prevItemNum[index] > 0 ? prevItemNum[index] - 1 : 0,
}));
};
return (
<div>
<h4 className='title'>상품목록</h4>
{itemCoo.map((item, i) => (
<div className='food' key={i}>
<img src={`/food${i}.png`} alt='음식' className='food-img' />
<h4>{item} 40$</h4>
<span>{itemNum[i] || 0}</span>
<button onClick={() => increaseItemNum(i)}> + </button>
<button onClick={() => decreaseItemNum(i)}> - </button>
</div>
))}
</div>
);
};
export default List;
검색이나 챗 gpt 한테 물어보는것도 좋다.
prevItemNum 값은 현재 useState의 {} 전체 숫자값.
[index]: prevItemNum[index] ? prevItemNum[index] + 1 : 1,
설명 현재 index 는 스테이트의 {0,0,0,0} 숫자의 위치값? (아직 이해가 좀더필요)
prevItemNum[index] 는 useState 의 객체 여러개의 숫자값중에 변경할 숫자값 한개의 위치를 말한다.