- 리덕스는 리액트에서 가장 많이 사용되는
상태 관리 라이브러리
중 하나이다- 리덕스를 사용하면 자바스크립트로 만들어진
컴포넌트의 상태 업데이트
관련 로직을 다른 파일로 분리시켜서 효율적으로 관리가 가능하다
Redux하나의 상태(객체)
를 갖는다
- 상태 변화가 필요할때, 액션을 일으킨다.
- 객체로 표현하며,
type
필드는 반드시 필요하다
actionTypes.js
export const LOGIN = "LOGIN";
export const AUTO_LOGIN = "AUTO_LOGIN";
export const LOGOUT = "LOGOUT";
authAction.js
export function autoLogin(dataToSubmit) {
const data = request("POST", INDIVIDUAL_URL, dataToSubmit);
return {
type: types.AUTO_LOGIN,
payload: data,
}
}
- 현재
state
와action
객체를 받아서 새로운state
를 반환시키는 함수action
을 기준으로 함수가 실행되며,eventListener
의 역할을 수행한다.- reducer가 여러개인 경우,
rootReducers
를 설정해 하나로 export 해주어야 한다.
authReducer.js
import * as types from '../actions/actionTypes';
const initialState = {
uniqueId: '',
passWord: ''
}
export default function userReducer(state = initialState, action) {
switch (action.type) {
case types.LOGIN:
return {
...state,
uniqueId: action.uniqueId
}
case types.AUTO_LOGIN:
return {
...state,
uniqueId: action.payload.userId
return state;
}
rootReducers.js
import { combineReducers } from "redux";
import authReducer from "./auth";
import userReducer from "./user";
const rootReducers = combineReducers({
auth: authReducer,
user: userReducer
});
export default rootReducers;
state
가 들어있다.- 오로지
하나의 스토어
만 존재해야 한다
import { createStore } from "redux";
import rootReducers from "./reducers/rootReducers";
const store = createStore(rootReducers);
export default store;
store
의 내장함수이다.action
객체를 넘겨서 상태를update
한다.eventTrigger
의 역할이다.
function mapReduxDispatchToReactProps(dispatch) {
return {
onPressLogin: function (uniqueId, passWord) {
dispatch(login(uniqueId, passWord));
}
}
}
- store의 내장 함수
listenser
함수를 파라미터로 넣어 호출하면 상태가 업데이트
- 현재의 값을
caching
하거나 저장하여 사용state
에서 필요한 데이터를 가져오거나 계산하여 가져오는 역할reselect
를 이용하면 memoization이 적용되어 재계산을 방지한다getter
의 역할
function todo = (state, action) => {
switch (action.type) {
case 'ADD_TODO':{
const newTodo = [...state.todos, action.todo];
return {
todos: newTodo,
compledtedTodos: newTodo.filter(todo => todo.isCompleted),
}
}
...
}
}
하나의 스토어
만 사용서버와의 직렬화
가 될 수 있고 쉽게 클라이언트에서 데이터를 받아들여올 수 있게 된다.오직 액션
을 일으키는 것추적이 용이
해지게 된다.순수한 함수
건드리지 않고
, 변화를 준 새로운 상태 객체
를 만들어서 반환똑같은 파라미터
로 호출된 리듀서 함수는 언제나 똑같은 결과 값
을 반환해야 한다.많은 양의 상태
들이 존재할 때 (전역 상태가 필요하다고 느껴질 때)자주 업데이트
될 때로직이 복잡
할 때많은 사람들에 의해 코드
가 관리될 때업데이트되는 시점
을 관찰할 필요가 있을 때