state는 Toggle Switch나 Counter처럼 컴포넌트 내부에서 변할 수 있는 값
예) 쇼핑몰 장바구니 내에서 check 된 상태
와 check 되지 않은 상태
컴포넌트 내에서 변할 수 있는 값, 즉 상태는 React state로 다뤄야 합니다.
React에서는 state를 다루는 방법 중 하나로 useState
라는 특별한 함수를 제공합니다.
useState
를 이용하기 위해서는 React로부터 useState
를 불러와야 합니다. import
키워드로 useState
를 불러옵시다.
import { useState } from "react";
이후 useState 를 컴포넌트 안에서 호출해 줍니다.
useState 를 호출한다는 것은 "state" 라는 변수를 선언하는 것과 같으며, 일반적인 변수는 함수가 끝날 때 사라지지만, state 변수는 React에 의해 함수가 끝나도 사라지지 않습니다.
function CheckboxExample() {
// 새로운 state 변수를 선언하고, 여기서는 이것을 isChecked 라 부르겠습니다.
const [isChecked, setIsChecked] = useState(false);
}
useState
문법 예시function CheckboxExample() {
// 1번 코드를 풀어쓰면
const [isChecked, setIsChecked] = useState(false); // 1번
//...
// 2번 코드와 같습니다.
const stateHookArray = useState(false); // 2번
const isChecked = stateHookArray[0];
const setIsChecked = stateHookArray[1];
}
useState
구조 분해 할당 예시useState
를 호출하면 배열을 반환하는데, 배열의 0번째 요소는 현재 state 변수이고, 1번째 요소는 이 변수를 갱신할 수 있는 함수입니다.
useState
의 인자로 넘겨주는 값은 *state의 초깃값입니다.
const [state 저장 변수, state 갱신 함수] = useState(상태 초기 값);
useState
수도 코드<span>{isChecked ? "Checked!!" : "Unchecked"}</span>
function CheckboxExample() {
const [isChecked, setIsChecked] = useState(false);
const handleChecked = (event) => {
setIsChecked(event.target.checked);
};
return (
<div className="App">
<input type="checkbox" checked={isChecked} onChange={handleChecked} />
<span>{isChecked ? "Checked!!" : "Unchecked"}</span>
</div>
);
}
React 컴포넌트는 state가 변경되면 새롭게 호출되고, 리렌더링 됩니다.
React state는 상태 변경 함수 호출로 변경해야 합니다. 강제로 변경을 시도하면 안 됩니다.
예시 : state.push(1);
, state[1] = 2;
, state = 'wrong state';