💻오늘 배운 내용
Redux Toolkit
리덕스를 개량한 것
코드는 더 적게, 그리고 리덕스를 더 편하게 쓰기 위한 기능들을 흡수해서 만든 것이 리덕스툴킷 (a.k.a RTK)
툴킷 설치하기
yarn add react-redux @reduxjs/toolkit
Action Value와 Action Creator를 이제 직접 생성해주지 않고, Action Value, Action Creator, Reducer가 하나로 합쳐졌다
=>Slice 라는 API를 사용
// src/redux/modules/counterSlice.js
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;
slice
createSlice 라는 API를 통해 만들 수 있다. 그리고 그 인자로 설정정보를 객체로 받는데,
그 안에 필수로 작성해줘야 하는 값은 name, initialState, reducers (s에 유의)
리듀서 객체 안에서 만들어주는 함수=리듀서의 로직=Action Creator
+) Action Value 까지 함수의 이름을 따서 자동으로...
configStore.js 파일에서도
// src/redux/modules/config/configStore.js
import { configureStore } from "@reduxjs/toolkit";
/**
* import 해온 것은 slice.reducer 이다.
*/
import counter from "../modules/counterSlice";
import todos from "../modules/todosSlice";
/**
* 모듈(Slice)이 여러개인 경우
* 추가할때마다 reducer 안에 각 모듈의 slice.reducer를 추가해줘야 한다.
*
* 아래 예시는 하나의 프로젝트 안에서 counter 기능과 todos 기능이 모두 있고,
* 이것을 각각 모듈로 구현한 다음에 아래 코드로 2개의 모듈을 스토어에 연결해준 것이다.
*/
const store = configureStore({
reducer: { counter: counter, todos: todos },
});
export default store;
기존의 createStore, combineReducers 2개의 api를 사용하던 것을 configureStore 하나로 가능해졌다.
🧐궁금점과 부족한 내용
'?' 옵셔널 체이닝
비동기 함수를 사용하여 데이터를 가져오고, 그 데이터를 렌더링 하는 코드의 로직에서 에러가 발생했을때
비동기 함수 처리가 완료 되기전에 JSX 부분이 먼저 실행되는 문제이니 옵셔널체이닝을 추가하면 해결이 될 것이라는
솔루션을 받았다. 옵셔널체이닝!? 솔직히 처음 들어봐서 뭔지 검색해보았다.
체인으로 이루어진 각 참조가 유효한지 명시적으로 검증하지 않고
연결된 객체 체인 내에 깊숙히 위치한 속성 값을 읽을 수 있는 연산자.
=>프로퍼티가 없는 중첩 객체를 에러 없이 안전하게 접근할 수 있도록 해주는 것
만약의 참조가 null 혹은 undefined여도 에러식을 뱉지 않고 undefined값을 리턴한다.
?. 앞의 변수는 꼭 선언되어 있어야 한다.
옵셔널 체이닝은 선언이 완료된 변수를 대상으로만 동작한다.
📋레퍼런스
'내일배움캠프 > Today I Learned' 카테고리의 다른 글
[TIL 2023.07.17] 아웃소싱 프로젝트 - 커밋(COME IT) (0) | 2023.07.17 |
---|---|
[TIL 2023.07.05] json-server와 HTTP (0) | 2023.07.05 |
[TIL 2023.07.03] Redux란 무엇인가 (0) | 2023.07.03 |
[TIL 2023.06.23] React Router Dom (hooks, Dynamic route, useParam) (0) | 2023.06.23 |
[TIL 2023.06.22] Redux에 대하여 2 (Action Creator, Payload, useDispatch, Ducks 패턴) (0) | 2023.06.23 |