react를 다루는 기술

3. state

crab. 2022. 6. 2. 08:32

state란?

  • 리액트에서 state는 컴포넌트 내부에서 바뀔 수 있는 값을 의미합니다.
  • State는 props처럼 App 컴포넌트의 렌더링 결과물에 영향을 주는 데이터를 갖고 있는 객체지만,
  • props는 (함수 매개변수처럼) 컴포넌트에 전달되는 반면 state는 (함수 내에 선언된 변수처럼) 컴포넌트 안에서 관리된다는 차이가 있다.
  • props를 사용했는데도 state를 사용하는 이유는, 사용하는 쪽과 구현하는 쪽을 철저하게 분리시켜서 양쪽의 편의성을 각자 도모하는 것에 있다.

클래스형 컴포넌트의 state

  • 반드시 super(props)를 호출해 주어야 합니다.
  • this.state 값에 초깃값을 설정해 주었습니다. 컴포넌트의 state는 객체 형식이어야 합니다.
  • render 함수에서 현재 state를 조회할 때는 this.state를 조회하면 됩니다.
  • this.setState를 사용하여 state 값을 업데이트할 때는 상태가 비동기적으로 업데이트됩니다.
  • this.setState의 인자로 함수를 넣어 줄 때는 코드를 다음과 같은 형식으로 작성합니다.
this.setState((prevState, props) => {
return {
  // 업데이트하고 싶은 내용
	}
})
  • setState를 사용하여 값을 업데이트하고 난 다음에 특정 작업을 하고 싶을 때는 setState의 두 번째 파라미터로 콜백(callback) 함수를 등록하여 작업을 처리할 수 있습니다.

함수형 컴포넌트에서 useState 사용하기

배열 비구조화 할당

  • 배열 비구조화 할당은 이전에 배운 객체 비구조화 할당과 비슷합니다.
const array = [1, 2];
const one = array[0];
const two = array[1];

//array 안에 있는 값을 one과 two에 담아 주는 코드인데요. 
//위 코드는 배열 비구조화 할당을 사용하면 다음과 같이 표현할 수 있습니다.

const array = [1, 2];
const [one, two] = array;

useState 사용하기

  • useState 함수의 인자에는 상태의 초깃값을 넣어 줍니다.
  • 함수를 호출하면 배열이 반환되는데요. 배열의 첫 번째 원소는 현재 상태이고, 두 번째 원소는 상태를 바꾸어 주는 함수입니다.
  • 여러번 사용가능

state 주의사항

  • state 값을 바꿀 때 세터 함수를 사용해야 한다. 직접적으로 바꾸면 안됨.
  • 배열이나 객체를 업데이트 하는 과정
    1. 배열, 객체 사본을 만든다. ( spread 연산자 )
    2. 사본에 값을 업데이트 한 후 사본의 상태를 setState, 세터 함수를 이용해 업데이트 ( 배열의 내장함수들. map, filter ..)
    const array = [
          {id : 1, value : true},
          {id : 2, value : false},
          {id : 3, value : true},
      ]
      let nextArray = array.concat({id:4})          // id가 4인 객체 추가
        nextArray.filter(item => item.id !== 2)     // id가 2인 객체 제거
        nextArray.map(item => item.id === 1 ? {...item, value:false})
        // id가 1인 객체 값을 false로 변경
    

'react를 다루는 기술' 카테고리의 다른 글

5. ref: DOM에 이름 달기  (0) 2022.06.05
4. 이벤트 핸들링  (0) 2022.06.03
3. props  (0) 2022.06.01
2. JSX  (0) 2022.05.31
1.3 작업 환경 설정  (0) 2022.05.30