ex) 쇼핑몰에서 구매를 누르면 장바구니에 담겨야한다
export default function EventComponent() {
let count = 0;
const onIncrease = () => {
count ++;
console.log(count);
}
return(
<h1>{count}</h1>
<button onClick={onIncrease}>숫자 +</button>
)
}
const[상태변수, 상태변경함수] = useState<상태변수타입>(초기값);
상태변수는 반드시 상태변경함수를 통해서 변경해야 리렌더링됨
import React, { useState } from 'react'
export default function StateComponent() {
//let count:number = 0;
const [count, setCount] = useState<number>(0);
//let counts : number[] = [];
const [counts, setCoints] =useState<number[]>([]);
const onIncrease = () => {
setCount(count + 1);
//상태변수는 반드시 상태변경함수를 통해서 변경해야 리렌더링됨
// count++;
// console.log(count);
};
return (
<div>
<h1>{count}</h1>
<button onClick={onIncrease}>+</button>
</div>
)
}
‼️
//0
setCount(count+1)
//0
setCount(count+2)
//0
setCount(count+3)
//상태 count : 0
//argCount : 0
console.log('상태 count : '+ + count)
setCount((argCount)=> {
console.log('argCount: ' + argCount)
return argCount + 1
});
//상태 count :0
//argCount : 1
console.log('상태 count : '+ + count)
setCount((argCount)=> {
console.log('argCount: ' + argCount)
return argCount + 2
});
//상태 count :0
//argCount : 3
console.log('상태 count : '+ + count)
setCount((argCount)=> {
console.log('argCount: ' + argCount)
return argCount + 3
});
let tmp = 0;
tmp = count;
tmp+=1;
tmp+=2
tmp+=3;
setCount(tmp);
const [total, setTotal]=useState<number>(0);
실패
setCount(count + 1);
setTotal(total + count);
해결법
const newCount = count +1;
setCount(newCount);
setTotal(total + newCount);
실패
counts.push(newCount);
console.log(counts);
setCounts(counts);
//화면 출력
// 0, 0
// 1, 0
// 2, 0
해결
const newCounts = [...counts, newCount];
setCounts(newCounts);
//화면출력
// 1, 0
// 2, 01
// 3. 012
const [comment,setCommet] = useState<string>('');
let comm = ''; //상태변수가 아님
const onChangeHandler = (event: ChangeEvent<HTMLInputElement>) =>{
comm = event.target.value;
console.log(comm);
setCommet(event.target.value);
}
<input value={comment} onChange={onChangeHandler}/>
return (
<div>
<h1>{comm}</h1>
<h1>{comment}</h1>
<input value={comment} onChange={onChangeHandler}/>
<h1> count : {count}</h1>
<h1>total : {total}</h1>
<h1>counts lenght: {counts.length} {counts}</h1>
<button onClick={onIncrease}>+</button>
</div>
)