본문 바로가기
라이브러리/상태관리

redux

by NANDEV 2022. 4. 13.

개요

redux는 store에서 상태를 관리하며, store는 단일 store이다.

 

action

1. action

  • action은 객체이며, store의 상태를 변경하는 용도로 사용한다.
  • type은 필수 프로퍼티이며 문자열이다.
  • {type: 'test'} payload가 없는 액션
  • {type: 'test', params: 'hello'} payload가 있는 액션

2. action creator

  • function 액션생성자이름(...args) { return 액션; }
  • action을 생성하는 함수를 액션 생성자라고 한다.
  • 함수를 통해 액션을 생성한 후 액션 객체를 리턴한다.

3. action이 하는 일

  • 액션 생성자를 통해 액션을 만든다.
  • 만들어낸 액션 객체를 리덕스 스토어로 보낸다.
  • 리덕스 스토어가 액션 객체를 받으면 스토어의 상태 값이 변경 된다.
  • 변경된 상태 값에 의해 상태를 이용하고 있는 컴포넌트가 변경된다.
  • 액션은 스토어에 보내는 일종의 인풋이다.

4. action을 설정하기 위한 두 단계

  • 액션의 타입을 정의하여 변수로 설정하는 단계
    - 대문자 상수 사용
  • 액션 객체를 만들어내는 함수를 만드는 단계
    - 하나의 액션 객체를 만들기 위해 하나의 함수를 사용한다.

reducer

1. reducer

  • reducer는 액션을 전달하면 전달한 액션이 적용되어 달라진(or 달라지지 않은) 결과를 만들어 준다.
  • reducer는 함수이다.(pure function)
  • reducer는 immnutable 해야한다.
  • reducer를 통해 state가 달라졌음을 redux가 인지하는 방식이다.

2. reducer 구조

  • function 리듀서이름(prevState, action) { return newState; }
  • action을 받아서 state를 return하는 구조이다.
  • parameter로 들어오는 prevState(이전 값)와 return 되는 newState(새로운 값)는 다른 참조를 가지도록 해야한다(각각 immutable 해야한다).

store

1. store

  • createStore(reducer)는 store를 만드는 함수다.
  • store 안에는 dispatch, getState, replaceReducer, subscribe의 등의 함수가 들어있다.
// store 생성
const store = createStore(reducer);

// 현재 store의 state를 가져오는 함수
store.getState()

// 액션을 parameter로 넣어서 store의 상태를 변경시키는 함수
store.dispatch();
store.dispatch(액선생성자());

// store에 변경이 생겼을 때 함수를 실행하는 함수
// unsubscribe가 return된다.
store.subscribe(() => {});

2. subscribe

  • store의 변경사항이 생기는 것을 구독한다.
  • store의 상태가 변경 되면 함수가 호출된다.
  • 구독을 취소하는 함수가 return된다.
const unsubscribe = store.subscribe(() => {
	console.log(store.getState());
});

// unsubscribe 함수 후부터는 console에 store 안에 있는 state가 출력되지 않는다.
unsubscribe();

 

combineReducers

1. combineReducers

  • combineReducers는 reducer들을 합칠 때 사용하는 함수이며, 객체가 들어가고, 객체 안에 reducer들이 들어간다.
const reducer = combineReducers({
	reducer,
    reducer
});

export default reducer;

 

redux를 react에 연결하는 방법

1. react-redux를 사용하지 않고 연결

  • store를 만들고, subscribe와 getState를 이용하여 변경되는 state 데이터를 얻고, 얻은 state를 props로 계속해서 아래로 전달하면 된다.

2. react-redux를 사용하여 연결

  • provider를 제공해준다.
  • connect 함수를 통해 컨테이너를 만들어준다.
    - 컨테이너는 store의 state와 dispatch(액션)를 연결한 컴포넌트에 props로 넣어주는 역할을 한다.
  • 어떤 state를 어떤 props에 연결할 것인지 정의
  • 어떤 dispatch(액션)를 어떤 props에 연결할 것인지 정의
  • 그 props를 보낼 컴포넌트를 정의
반응형

댓글