state
라는 값을 선언하고 변경할 수 있는 Hookimport { useState } from "react";
// Javascript
const [state, setState] = useState(initialState);
// Typescript
const [state, setState] = useState<T>(initialState);
state
setState
initialState
const a = 10;
이라는 변수 선언문이 있을 때, a가 state이고 10이 initialState라고 이해하면 쉽다.const [name, setName] = useState("철수");
console.log(name); // 철수
function setNameFunc() {
setName("영희"); // ! 비동기로 동작하는 함수 !
console.log(name); // 철수
}
최적화
에 도움이 된다.비동기
로 동작하는 함수이다.const [name, setName] = useState("철수");
function setNameFunc() {
setName("영희", () => {
console.log(name); // 영희
});
}
setName 함수를 실행 후 콜백함수를 호출해주면 우리가 원하는대로 동기적으로 작업을 실행할 수 있다. 그러나 이런 콜백함수가 더 많아진다면? 복잡해질것이다.
const [name, setName] = useState("철수");
function setNameFunc() {
setName("영희"); // 영희
setName(prev => "김" + prev); // 김영희
}
함수의 인자로 다음과 같은 함수(updater)를 전달한다. 이전 상태의 값을 기준으로 새로운 값을 업데이트한다.
useState
는 Hook이므로 컴포넌트의 최상위 레벨에서만 호출할 수 있다.state
는 반드시 읽기 전용
이어야 한다.const [name, setName] = ("철수");
name = "영희"; // (X) 이런 방식의 값 변경은 절대 금지!
setName("영희"); // (O) "영희"라는 새로운 객체를 만들어 할당한다.
https://ko.react.dev/reference/react/useState
https://velog.io/@dosilv/TIL-React-setState-%EB%B9%84%EB%8F%99%EA%B8%B0-%EC%B2%98%EB%A6%AC%ED%95%98%EA%B8%B0-648sv7je