본문 바로가기
코딩

Redux

by Frontend 2022. 7. 7.

Redux 란?

  • ‘상태 관리 라이브러리'로서, 컴포넌트와 상태를 분리하여 상태를 좀 더 효율적으로 활용할 수 있게끔 해준다.
  • React에 종속된 라이브러리가 아니기 때문에, 별개로 사용이 가능하다.

 

언제 사용하는 것이 좋을까?

  • Redux를 이용하지 않는 경우
    : 최상위 컴포넌트가 특정 상태를 사용하지 않음에도 다른 하위 컴포넌트로 해당 상태를 Props로 내려주기 위해 ‘상태 끌어올리기'로 최상위 컴포넌트를 거쳐 상태를 받아서 내려줘야한다 → 비효율적

  • Redux 이용 시
    : 전역 상태 저장소인 ‘Store’를 사용하여 해당 상태를 ‘Store’를 통해 목표 컴포넌트로 직접 전달이 가능하다.

Redux의 순서 및 구조

Action(객체) → Dispatch(함수) → Reducer(함수) → Store

 

Action {}

  • 객체 타입.
  • 필수 프로퍼티 : type
  • 대문자 및 Snake case로 작성. ex) ‘SET_NUMBER’
{ type: 'SET_NUMBER', payload: 5 }
  • 액션 생성자(Action creater) 함수로 작성 가능.
const setNumber = (num) => {
	return {
		type: 'SET_NUMBER',
		payload: num
	}
}

 

Dispatch ()

  • Action을 Reducer로 전달해주는 함수 → useDispatch 메서드를 통해 사용.
  • 전달인자 : Action 객체
import { useDispatch } from 'react-redux'
const dispatch = useDispatch()

dispatch( {type: 'SET_NUMBER', payload: 5} );

// or

dispatch( setNumber(5) );

 

Reducer(currentState, Action)

  • Dispatch에서 전달받은 Action의 type 값에 따라 상태를 변경시키는 함수.
  • 순수 함수
  • 2개의 매개 변수를 지님 : (currentState, action)

코드스테이츠 강의 자료 예시 코드를 그대로 작성해보고자 한다 :

const count = 1

// 초기 상태가 인자로 들어감.
const counterReducer = (state = count, action) {

	switch(action.type)    // if문 대신 작성하면, 훨씬 가독성이 높아짐.
		case 'INCREASE':
				return state + 1

		case 'DECREASE':
				return state -1

		case 'SET_NUMBER':
				return action.payload

		default:             // 해당 경우가 없을 경우, 기존 상태를 리턴.
				return state; 

}
  • Reducer 함수가 다수인 경우 → combineReducers 메서드 사용
import { combineReducers } from 'redux';

const rootReducer = combineReducers({
	counterReducer,
	anyReducer
});

 

Store

  • 상태 관리 저장소
  • createStore 메서드를 이용해 store 생성
import { createStore} from 'redux';

const store = createStore(rootReducer);   // createStore에 Reducer 함수를
																					// 전달인자로 넣어줌.

Redux Hooks

  • 대표적인 Hooks
    : useSelector, useDispatch → 둘 다 ‘react-redux’에서 가져와야 함.

 

useSelector()

  • 컴포넌트와 state를 연결시켜주는 메서드.
  • Redux의 state에 접근할 수 있게 해준다.
import { useSelector } from 'react-redux'

const counter = useSelector(state => state.counterReducer)

// 1

 

useDispatch()

  • Action을 Reducer로 전달해주는 메서드.
import { useDispatch } from 'react-redux'

const dispatch = useDispatch()

dispatch( setNumber(5) )

 


#느낀점

개념은 대강 이해했는데, 역시 직접 코드를 짜봐야 내 것이 될 것 같다.

특히, useSelector 메서드 부분이 명확하게 이해가 안간다. 이 부분은 과제를 통해 직접 코드를 짜봐야 할 듯.

'코딩' 카테고리의 다른 글

[Section 3] 모의 기술면접 준비 자료  (0) 2022.07.20
웹 표준, 웹 접근성  (0) 2022.07.12
[React] Custom Component  (0) 2022.06.30
[React] Styled Components 실습  (0) 2022.06.30
[UI / UX] UI / UX 분석  (0) 2022.06.29