State 란, 컴포넌트 내부에서 바뀔 수 있는 값을 의미.
useState( ) 는 React 에서 제공하는 훅 (Hook)으로, state를 생성해주는 기능을 가지고 있다.
import { useState } from "react"
const [state, setState] = useState(초기값);
✔️ 구조분해할당 문법을 사용하여, 배열 안에 각각 state의 이름과 set + state의 이름으로 useState( ) 훅을 생성.
✔️ useState( ) 의 인자에는 state의 초기값을 설정.
➀ state 란, 상태의 할당된 값이 담긴 변수로 set함수가 사용됨에 따라 값이 변경.
➁ setState 란, state의 할당된 값을 변화시키는 함수.
✔️ state의 이름은 변수에 할당할 값에 따라 유동적으로 변경 가능.
import { useState } from "react"
const [state, setState] = useState('');
setState('Hello World !');
console.log(state); // Hello World !
✔️ setState( ) 함수로 인해, state에 'Hello World !' 가 할당되어 출력.
✔️ setState( ) 함수를 event 핸들러와 연결하는 방식으로, state에 할당시키는 시점을 조절 가능.
📌 Caution.
setState() 함수로 값을 할당했더라도, 해당 값이 어딘가에 저장되어 있지 않기 때문에 브라우저를 새로고침하면 다시 초기값으로 변경.
➀ 배열 Array
import { useState } from "react"
const [state, setState] = useState([{name: '모찌', species: '말티즈'}]);
setState((prev)=>[...prev, {name: '뭉치', species: '리트리버'}] );
console.log(state);
// [{name: '모찌', species: '말티즈'}, {name: '뭉치', species: '리트리버'}]
➁ 객체 Object
import { useState } from "react"
const [state, setState] = useState([{name: '모찌', species: '말티즈'}]);
setState((prev)=>{
return {...prev, age: 8}
} );
console.log(state);
// { name: '모찌', species: '말티즈', age:8 }
✔️ 새로운 객체를 생성하고 이전 state 값을 복사한 후, 변경된 값을 setState( )의 인수로 할당.
📌 Caution.
" 불변성을 지킨다 " : 메모리 영역에서 값을 변경할 수 없게 한다.
1) 리액트의 state 변화 감지 기준은 "콜스택의 주소값"이다.
: state를 빠르게 감지할 수 있게 하지만 불변성을 유지해야 하는 이유이기도 하다.
참조 타입의 값을 변경할 경우,
콜스택의 주소값은 변경이 없어 react는 state의 변경이 없다고 감지하기 때문에 변경된 state는 재랜더링되지 않는다.
2) 불변성을 지킴으로서 사이드 이펙트와 복잡한 코드를 방지할 수 있다.
: 기존 메모리 영역의 값이 변경할 경우, 기존 메모리 영역의 값을 사용하는 다른 코드에서 발생할 수 있는 오류를 사전에 방지 가능.
🧷 Reference - 참조한 글 바로가기