
[250127 월요일]
리액트라는 프론트엔드 라이브러리를 접한지 이제 일주일정되 되었는데...강의명이 숙련이라니요??!?!?!🫠
새로운 리액트 훅이 등장해서 정리를 해놔야 진도를 잘 따라갈 수 있겠다. 아직도 너무 헷갈리는 리액트🥲
useState는 컴포넌트 내에서 상태(state)를 관리하는 훅(Hook).- 상태(state)는 컴포넌트가 렌더링하는 데이터인데, 이 값(state)이 바뀌면 컴포넌트가 다시 렌더링된다.
useState 기본 사용법const [state, setState] = useState(initialState);
state: 현재 상태 값setState: 상태를 변경할 수 있는 함수initialState: 상태의 초기값 (문자, 숫자, 배열, 객체 등)const [count, setCount] = useState(0); // count는 0으로 초기화
- 상태가 객체나 배열인 경우(참조형 데이터), 불변성(immutability)을 유지해야 한다.
- 객체나 배열의 값을 직접 변경하는 것은 리액트의 렌더링과 상태 업데이트 로직을 예상하지 못하게 만들 수 있기 때문에 새로운 객체나 배열을 만들어서 상태를 업데이트해준다.
const [user, setUser] = useState({ name: 'John', age: 30 });
//
// 잘못된 예 (불변성 위반)
setUser(user => user.name = 'Jane'); // 불변성 위반, 직접 수정
//
// 올바른 예 (불변성 지킴)
setUser(user => ({ ...user, name: 'Jane' })); // 새로운 객체로 상태 업데이트
setState 업데이트 방식
setState로 상태를 업데이트하는 방식은 크게 일반 업데이트 방식과 함수형 업데이트 방식으로 나눌 수 있다.
- 상태를 바로 수정하는 방식으로, 이전 상태 값을 고려하지 않고 새로운 값을 설정하는 방식.
- 리액트는 이 업데이트를 배치(batch:일괄) 처리하므로, 여러
setState호출이 동시에 일어나도 동일 명령으로 판단하고 마지막 명령 한 번만 렌더링된다.setState(newValue)
const [count, setCount] = useState(0);
// 일반적인 업데이트 방식
// 현재 count 값에 1을 더해 새로운 값을 설정
// props -> count, setCount
<button onClick={() => {
setCount(count + 1)
setCount(count + 1)
setCount(count + 1)
}}
>
버튼
</button>
- 상태를 업데이트할 때 이전 상태 값을 기반으로 새로운 상태 값을 설정하는 방식.
- 여러 개의 상태 업데이트가 있을 때 이전 상태를 기반으로 처리할 때 사용할 수 있다.(비동기 처리방식)
setState(prev => newValue)
const [count, setCount] = useState(0);
// 함수형 업데이트 방식
// 이전 상태 값(prev)을 사용해 새로운 상태 계산
// 함수 로직은 순차 처리하여 아래 코드의 경우 총 3회 반영됨
// props -> setCount
<button onClick={() => {
setCount(prev => prev + 1)
setCount(prev => prev + 1)
setCount(prev => prev + 1)
}}
>
버튼
</button>
이 방법을 사용하면, setState가 여러 번 호출될 때 각 호출이 이전 상태를 정확히 반영하게 된다.
[250131] 금요일 추가
App.jsx
import React, { useState } from "react";
function App () {
const [count, setCount] = useState(0);
const handleClick = () => {
setCount(count + 1);
console.log("1st count:", count); // 1st count: 0
setCount(count + 1);
console.log("2nd count:", count); // 2nd count: 0
};
console.log("3rd count", count); // 3rd count: 1
return (
<div>
<p>Count: {count}</p>
<button onClick={handleClick}>증가</button>
</div>
);
}
export default App;


