함수형 컴포넌트에서 App의 상태(state) 업데이트 하기 위해 useState 사용한다.

let countState = 0;
const appCountElement = document.getElementById('app-count');
const appCountBtnElement = document.getElementById('app-btn');
const handleClick = () => {
console.log('Click Event');
countState++;
appCountElement.textContent = countState;
};
appCountBtnElement.addEventListener('click', handleClick);

function Counter() {
let count = 0;
const handleClick = () => {
console.log("Click Event");
count++;
};
return (
<>
<h1>React</h1>
<h2>Count</h2>
<div>{count}</div>
<button onClick={handleClick}>Up</button>
</>
);
}
export default Counter;
function Test() {
let state = 'Hello';
function handleBtnClick() {
console.log('Click Event');
state = '안녕';
}
return (
<div>
<h1>Use State</h1>
<h2>{state}</h2>
<button onClick={handleBtnClick}>한글</button>
{console.log('return - state:', state)}
</div>
);
}
export default Test;

( "한글" 버튼을 아무리 클릭해도, return 문의 {state} 값은 초기화 값 "Hello" 이다. )
import { useState } from 'react';
function Test() {
const [state, setState] = useState('Hello');
function handleBtnClick() {
console.log('Click Event');
setState('안녕');
}
return (
<div>
<h1>Use State</h1>
<h2>{state}</h2>
<button onClick={handleBtnClick}>한글</button>
{console.log('return - state:', state)}
</div>
);
}
export default Test;

( "한글" 버튼을 클릭하면, state 값이 변경되어 리-렌더링 된다. )
import { useState } from 'react';
function Test() {
const [state, setState] = useState({ name: 'Han', greeting: 'Hello' });
function handleBtnClick() {
console.log('Click Event');
setState((state.greeting = '안녕'));
}
return (
<div>
<h1>Use State</h1>
<h2>
{state.greeting} {state.name}
</h2>
<button onClick={handleBtnClick}>한글</button>
{console.log(state)}
</div>
);
}
export default Test;
import { useState } from 'react';
function Test() {
const [state, setState] = useState({ name: 'Han', greeting: 'Hello' });
function handleBtnClick() {
console.log('Click Event');
setState({...state, greeting: "안녕"});
}
return (
<div>
<h1>Use State</h1>
<h2>
{state.greeting} {state.name}
</h2>
<button onClick={handleBtnClick}>한글</button>
{console.log(state)}
</div>
);
}
export default Test;