49일차 TIL 210517 Redux

1. 리덕스란 ?

  • 자바스크립트 애플리케이션에서 상태를 효율적으로 관리할 수 있게 도와주는 도구
  • 리액트로 만들 수 있는 싱글 페이지 애플리케이션은 data 혹은 UI가 복잡, 다양해지는 경우가 많아진다.
  • 그에 따라 단일 페이지를 이루는 컴포넌트들의 데이터 교류 또한 복잡해지기 때문에 이를 효율적으로 관리할 방법이 필요하다. 리덕스는 이러한 복잡한 상태관리를 효율적으로 할 수 있게 도와주는 도구이다.
  • 리덕스는 스토어를 사용하여 상태를 컴포넌트 바깥에 두고 스토어라는 중간자를 통해 상태를 업데이트 하거나 새로운 상태를 전달 받는다.
  • 즉 리덕스를 사용하면, 상태값을 컴포넌트에 종속시키지 않고 상태관리를 바깥에서 할 수 있게 해준다.
  • 스크린샷 2021-05-17 오후 2 46 03

2. 용어정리

  • Action : 상태의 변화가 필요할 때 액션을 발생시킨다. 액션은 하나의 객체로 표현된다.
{
  type: "ADD_TODO",
  data: {
    id: 0,
    text: "redux"
  }
}
  • Action Creator : 액션 생성함수. 액션을 만드는 함수이다. 파라미터를 입력받아 액션 객체 형태로 만들어준다.
  • 이 함수는 data 라는 파라미터를 입력받아 액션을 객체 형태로 반환하는 역할을 한다.
function addTodo(data) { 
  return{
    type: "ADD_TODO",
    data
   }
  };
  • Reducer : 변화를 일으키는 함수. 이전 상태와 액션을 파라미터로 입력받는다. 반환값은 로직에 의해 변화된 상태값을 반환한다.
  • Store : 컴포넌트 외부에 있는 상태 저장소. 스토어 안에는 현재 상태들, 리듀서, 그리고 몇가지의 내장 함수를 포함하고 있다.
  • Dispatch : 스토어의 내장 함수 중 하나로, 액션을 발생시키는 역할을 한다. dispatch(action) 디스패치가 액션을 발생시켜 스토어에게 상태변화가 필요하다는 것을 알린다.
  • 그렇게 호출된 액션은 리듀서 함수를 호출시키고, 액션에 맞는 로직대로 상태를 변화시키는 과정을 거치는 것이다.
  • Subscribe : 스토어의 내장 함수. 함수 형태의 값을 파라미터로 받아온다. subscribe 함수에 특정 함수를 전달해주면, 액션이 디스패치 되었을때마다 전달해준 함수가 호출된다.

3. 정리

  • 추가, 삭제와 같은 각각의 액션 타입을 정의한다. 액션 함수는 각각의 액션 타입과 파라미터를 입력받아 액션을 객체 형태로 반환해준다.
  • 상태의 변화가 필요해진다면, 디스패치가 액션을 발생시켜 스토어에게 알린다. 스토어로 전달된 액션은 스토어의 리듀서 함수를 호출시키고, 호출된 리듀서 함수는 이전 상태와 액션타입을 파라미터로 전달 받아
  • 정의된 로직대로 현재 상태값을 변화시켜 변화된 상태를 반환한다. 반환된 상태는 스토어에 저장된다

4. 리덕스 규칙

  • 단일 스토어 사용 권장, 하나의 애플리케이션에는 하나의 스토어를 사용하는 것을 권장
  • 상태는 읽기 전용이어야 한다. immutability
  • 리듀서는 순수한 함수여야 한다.

Updated: