상태변수는 초기값을 갖고 있다.
해당 state변수의 값은 상태변경함수()만 사용해서 해당 값을 변경할 수 있다.
let [상태변수, 상태변경함수] = useState( 초기 값)
let [like, setLike] = useState(0);
// 블로그 이름 목록 초기 셋팅
let [blogName, setBlogName] = useState([
"코딩학원 추천","온라인 코딩 강의 추천","개발 블로그 추천",
]);
<div className="list">
<h3> {blogName}
<span onClick={() => { setLike(like + 1); }} > 👍 </span> {like} </h3>
<p>3월 02일 발행</p>
<hr />
</div>
=> 이 방법의 단점, 데이터가 증가할때마다 [0,0,0,0] 0을 계속 추가해줘야한다!
후에 데이터가 입력될때마다 알아서 되게끔 해보자
let [like, setLike] = useState([0, 0, 0]);
map의 특성을 활용하여, 버튼을 눌렀을때 즉 onclick했을 때 like의 개수가 1씩 증가하도록 한다.
map 1 번째 인자 el : 각 요소 한개, 제목 한개(순서대로)
map 2 번째 인자 i : 각 요소의 인덱스, 위치를 나타낸다.
변수 하나 생성하여 like [0,0,0] 배열 값을 복사해서 갖고 온다.
- 깊은 복사! 스프레드 문법
likeCnt[i]++ : 버튼을 누르면 해당 글 번호에(인덱스) 해당되는 like좋아요 i번째 요소인, 0 에 +1을 더해준다.
setLike(likeCnt) : 상태변수함수를 사용해서 +1더해진 값으로 상태변수 like를 바쒀준다.
{like[i]} : 해당 글번호와 같은 좋아요 요소(1이 더해진)를 출력한다.
{blogName.map((el, i) => {
return (
<div className="list" key={i}>
<h3>
{el}
<span
onClick={() => {
let likeCnt = [...like];
likeCnt[i]++;
setLike(likeCnt);
}}
>
👍
</span>
{like[i]}
</h3>
<p>3월 02일 발행</p>
<hr />
</div>
);
})}
감사합니다