Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 개발일지
- 부트캠프
- 부트캠프 #개발일지 #TIL #FlexboxFroggy #displayflex #flexbox
- useEffect
- 개발일지 #TIL #프론트엔드 #HTML
- 부트캠프 #CSS #개발일지 #TIL
- 알고리즘
- textContent
- 부트캠프 #스파르타코딩클럽 #개발일지# #TIL #Javascript #confirm #location.href
- Til
- 부트캠프 #개발일지 #TIL #Position #위치
- ㅜㄹㄹ
- JS예제
- CSS
- 특성선택자
- 부트캠프 #CSS #개발일지 #TIL #박스모델
- appendChild
- js
- 의사클래스
- querySelector
- 템플릿스트링
- 부트캠프 #개발일지 #TIL #CSS속성 #float #clear
- 리액트
- 부트캠프 #코딩 #개발일지 #프론트엔드 #CSS #TIL
- React
- 부트캠프 #개발일지 #TIL #그리드 #CSS
- 깃허브오류
- 결합선택자
- useState
- 부트캠프 #스파르타코딩클럽 #개발일지# #html
Archives
- Today
- Total
나의 개발일지
[React] Redux-Toolkit 설치 / counter app / TodoList 본문
Redux-toolkit(RTK)이란
기존의 리덕스를 개량한 것이다
코드는 더 적게, 그리고 더 편하게 개발했다
기존의 리덕스와 다른 점은 Action Value와 Action Creator, Reducer가 하나로 합쳐졌다는 점이다
리덕스 툴킷 설치
// NPM
npm install @reduxjs/toolkit
// Yarn
yarn add @reduxjs/toolkit
RTK에선 Slice라는 API를 사용한다
//createSlice API 뼈대
const counterSlice = createSlice({
name: '', // 이 모듈의 이름
initialState : {}, // 이 모듈의 초기상태 값
reducers : {}, // 이 모듈의 Reducer 로직
})
RTK로 counter app 만들기
+ 버튼을 누르면 1만큼 증가
- 버튼을 누르면 1만큼 감소
src > redux > config > configStore.js
import counter from "../modules/counter";
import { configureStore } from "@reduxjs/toolkit";
// 일반 리덕스
// const rootReducer = combineReducers({
// //states
// counter,
// });
// const store = createStore(rootReducer);
// RTK
const store = configureStore({
reducer: { counter },
});
export default store;
src > App.js
import { useDispatch, useSelector } from "react-redux";
import { addNumber, minusNumber } from "./redux/modules/counter";
function App() {
const number = useSelector((state) => {
return state.counter.number;
});
const dispatch = useDispatch();
const onPlusClickHandler = () => {
dispatch(addNumber(1));
};
const onMinusClickHandler = () => {
dispatch(minusNumber(1));
};
return (
<>
<div>{number}</div>
<button onClick={onPlusClickHandler}>+</button>
<button onClick={onMinusClickHandler}>-</button>
</>
);
}
export default App;
src > redux > modules > counter.js
import { createSlice } from "@reduxjs/toolkit";
// Initial State
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;
},
},
});
// reducer 는 configStore에 등록하기 위해 export default
export default counterSlice.reducer;
// Action Creator는 컴포넌트에서 사용하기 위해 export
export const { addNumber, minusNumber } = counterSlice.actions;
RTK로 TodoList 만들기
src > redux > config > configStore.js
import todos from "../modules/todos";
import { configureStore } from "@reduxjs/toolkit";
const store = configureStore({
reducer: {
todos,
},
});
export default store;
src > redux > modules > todos.js
import { createSlice } from "@reduxjs/toolkit";
import { v4 as uuidv4 } from "uuid";
// initial states
const initialState = [
{
id: uuidv4(),
title: "리액트 공부하기",
contents: "빨리빨리 암기하기",
isDone: false,
},
{
id: uuidv4(),
title: "스프링 공부하기",
contents: "인강 열심히 들어보기!!",
isDone: true,
},
{
id: uuidv4(),
title: "데이트",
contents: "홍대입구역에서 3시까지",
isDone: false,
},
];
// slice
const todosSlice = createSlice({
name: "todos",
initialState,
reducers: {
addTodo: (state, action) => {
return [...state, action.payload];
},
removeTodo: (state, action) => {
return state.filter((todo) => todo.id !== action.payload);
},
switchTodo: (state, action) => {
return state.map((todo) => {
if (todo.id === action.payload) {
return { ...todo, isDone: !todo.isDone };
} else {
return todo;
}
});
},
},
});
//export
export const { addTodo, removeTodo, switchTodo } = todosSlice.actions;
export default todosSlice.reducer;
redux-devtool을 이용하면 store를 한 눈에 잘 볼 수 있다!
'React > Redux' 카테고리의 다른 글
[React] Redux로 TodoList 만들기 (0) | 2023.11.28 |
---|---|
[Redux] Redux를 사용하는 이유 / Redux 실행 과정 이해하기 /Counter 만들기 (1) | 2023.11.20 |