Redux는
JavaScript 애플리케이션에서 (전역 / 부분전역) 상태를 관리하는 오픈 소스 라이브러리
주로 React와 함께 사용되며, Angular, Vue 등 다른 프론트엔드 라이브러리와도 연동하여 상태 관리를 용이
상태 관리의 복잡성 해소
애플리케이션의 상태는 컴포넌트 **계층 구조를 통해 전달
(props!**되는데, 애플리케이션이 커지고 복잡해질수록 상태의 흐름을 파악하기 어려워지는데
Redux는 이러한 상태 관리의 복잡성을 해소하고,
애플리케이션 전역에서 상태를 통합적으로 관리함으로써 간결하고 예측 가능한 상태 관리를 제공
❗ 예측이 가능하다?
어느 컴포넌트에서든지 접근(useSelector) / 제어(useDispatch)가 쉽고 용이하게 되어있으므로,
전역상태가 어떨지 특정 이벤트에서 고려하기 쉽다
어느 컴포넌트에서 오류가 발생했는지도 바로 알 수 있음.
데이터 흐름의 일관성 유지 Redux는 상태 변경을 예측 가능한 "액션(Action)"객체로 관리. 이를 통해 어떤 액션이 어떤 상태를 변경하는지 추적하기 쉬워지며, 애플리케이션의 데이터 흐름이 일관성을 유지.
Redux의 주요 개념들은 무엇인가요? (예: Store, Action, Reducer)
Store
Action
Reducer
Toolkit(Feat. Flux Pattern)
리덕스를 사용하기 위해 작성했던 ducks 패턴의 요소들이 전체적인 코드의 양을 늘린다는 개발자들의 불만이 발생하기 시작했고, 리덕스 팀에서는 이것을 수용하여 코드는 더 적게, 그리고 리덕스를 더 편하게 쓰기 위한 기능들을 흡수해서 만든 것이 리덕스툴킷
줄여서 RTK 라고도 합니다.
전혀 새로운 것이 아니며,
리덕스의 전체 코드의 양을 줄이기 위해 새로운 API가 추가되었고 우리가 일일히 손으로 만들어 줘야 했던
ducks 패턴의 요소들이 어느정도 자동화 되었다.
일반 리덕스와 코드 비교
/// 일반 REDUX
// Action Value
const ADD_NUMBER = "ADD_NUMBER";
const MINUS_NUMBER = "MINUS_NUMBER";
// Action Creator
export const addNumber = (payload) => {
return {
type: ADD_NUMBER,
payload,
};
};
export const minusNumber = (payload) => {
return {
type: MINUS_NUMBER,
payload,
};
};
// Initial State
const initialState = {
number: 0,
};
// Reducer
const counter = (state = initialState, action) => {
switch (action.type) {
case ADD_NUMBER:
return {
number: state.number + action.payload,
};
// [퀴즈 답]
case MINUS_NUMBER:
return {
number: state.number - action.payload,
};
default:
return state;
}
};
// export default reducer
export default counter;
/// RTK
import { createSlice } from "@reduxjs/toolkit";
const initialState = {
number: 0,
};
const counterSlice = createSlice({
name: "counter",
initialState,
reducers: {
addNumber: (state, action) => {
state.number = state.number + action.payload;
},
minusNumber: (state, action) => {
state.number = state.number - action.payload;
},
},
});
// 액션크리에이터는 컴포넌트에서 사용하기 위해 export 하고
export const { addNumber, minusNumber } = counterSlice.actions;
// reducer 는 configStore에 등록하기 위해 export default 합니다.
export default counterSlice.reducer;
한 눈으로 보기에도 코드가 굉장히 짧아졌고 이해하기에도 쉬워졌다.
슬라이스는 createSlice 라는 API를 통해 만들 수 있다. 그리고 그 인자로 설정정보를 객체로 받는데, 그 안에 우리가 필수로 작성해줘야 하는 값은 name, initialState, reducers가 있다
//createSlice API 뼈대
const counterSlice = createSlice({
name: '', // 이 모듈의 이름
initialState : {}, // 이 모듈의 초기상태 값
reducers : {}, // 이 모듈의 Reducer 로직
})
counterSlice 리듀서 객체 안에서 만들어주는 함수가 리듀서의 로직이 되면서도 동시에 Action Creator가 된다
그리고 Action Value 까지 함수의 이름을 따서 자동으로 만들어지며, 그래서 우리는 Reducer만 만들어주면 됨
// 액션크리에이터는 컴포넌트에서 사용하기 위해 export 하고
export const { addNumber, minusNumber } = counterSlice.actions;
// reducer 는 configStore에 등록하기 위해 export default 한다.
export default counterSlice.reducer;
60일차 TIL(RTK / 최종프로젝트 발제 ) (2) | 2023.08.17 |
---|---|
58일차 TIL( 팀프로젝트 발제 / 계획 - wireFrame) (0) | 2023.08.07 |
56일차 TIL(AWS 강의 note-2 / 후발대 보충강의) (0) | 2023.08.03 |
55일차 TIL(AWS 강의 note / ts - note) (0) | 2023.08.02 |
54일차 TIL (Lv.2과제 완료 / 후발대 강의) (0) | 2023.08.01 |