IT/React
[React] Tool-kit로 To-do List 만들어보기 -1
HJ::
2023. 7. 7. 00:31
React redux tool-kit 으로 투두 리스트를 만들어 보는중이다.
기존 리덕스보다 편리하고 깔끔하다.
기존 To-do 리스트 몇개 만들어 주고 띄어주고 삭제 기능까지 구현했다.
설치
yarn add react-redux @reduxjs/toolkit
패키지를 설치해준다.
store
// src/redux/modules/config/configStore.js
import { configureStore } from "@reduxjs/toolkit";
import todoSlice from "../modules/todoSlice";
const store = configureStore({
reducer: { todo: todoSlice },
});
export default store;
-기존 리덕스와 같이 store도 생성해주고,
// index.js
root.render(
<Provider store={store}>
<App />
</Provider>
);
-Provider로 감싸줘서 사용해준다.
todoSlice
// src/redux/modules/todoSlice
import { createSlice } from "@reduxjs/toolkit";
import shortid from "shortid";
// counterSlice.js의 Slice 구조
const initialState = [
{
id: shortid.generate(),
writer: "김철수",
title: "리액트1",
contents: "리액트 공부하기1",
},
{
id: shortid.generate(),
writer: "김나은",
title: "운동하기",
contents: "러닝",
},
];
const todoSlice = createSlice({
name: "todo",
initialState,
reducers: {
addTodo: (state, action) => {
state.push(
{
id: shortid.generate(),
writer: action.payload.writer,
title: action.payload.title,
contents: action.payload.contents,
}
)
},
removeTodo: (state, action) => {
return state.filter((todo)=> todo.id !== action.payload)
}
},
});
// 액션크리에이터는 컴포넌트에서 사용하기 위해 export 하고
export const { addTodo, removeTodo } = todoSlice.actions;
// reducer 는 configStore에 등록하기 위해 export default 합니다.
export default todoSlice.reducer;
초기값을 두고 삭제, 추가 기능을 넣어줬다
- 이제 createSlice라는 API를 사용해준다.
기존의 redux랑 유사해서 기본 틀만 반복 숙달 해줘야겠다.
- push() 부분에 객체 복사 작업을 안 해줬지만 작동을 한다. 이미 툴킷 안에 포함되어 있는 기능이기 때문이다.
사용해보기
// List.jsx
const todos = useSelector((state) => state.todo);
const dispatch = useDispatch();
return (
<>
{todos.map((todo) => (
<div key={todo.id}>
<h3>제목: {todo.title}</h3>
<p>id: {todo.id}</p>
<p>작성자: {todo.writer}</p>
<p>내용: {todo.contents}</p>
<button onClick={()=>{dispatch(removeTodo(todo.id))}}>삭제</button>
</div>
</>
);
};
-useSelector로 초기 리스트를 가져와주고 map으로 원소들을 뿌려준다.
-dispatch로 slice에 등록한 함수를 사용해준다.
결과:
마무리
-기존 redux는 복잡해서 그런지 잘 안 와닿았는데 tool-kit은 뭔가
잘 이해된다.