๐ Redux๋?
React์์ ์ฃผ๋ก ์ฌ์ฉํ๋ฉฐ, ์ํ๊ด๋ฆฌ๋ฅผ ๋ณ๋์ ์ ์ฅ์์์ ๋ค๋ฃฐ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๐ useState์ Redux์ ์ฐจ์ด
๐ useState()์ ๊ฒฝ์ฐ
๋จ๋ฐฉํฅ์ผ๋ก๋ง ์ํ๋ฅผ ๊ฐฑ์ ํ ์ ์๋ค.
๋ฌผ๋ก ๋น์ฐํ props๋ฅผ ํตํด ์ํ ๊ฐฑ์ ํจ์๋ฅผ ๋ด๋ ค์ฃผ๋ฉด ๋์ง๋ง ์ข์ ๋ฐฉ๋ฒ์ ์๋๋ผ๊ณ ์๊ณ ์๋ค.
๐ Redux์ ๊ฒฝ์ฐ
๋ชจ๋ ์ปดํฌ๋ํธ์์ Redux Store์ ์ ๊ทผํ์ฌ ์ํ๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋, reducers๋ฅผ ํตํด ์ํ๋ฅผ ๊ฐฑ์ ํ ์ ์๋ค.
๐ Redux Store์ ๊ตฌ์ฑ ์์
- `initialState`: ์ํ์ ๊ธฐ๋ณธ๊ฐ
- `reducers`: ์ํ๋ฅผ ๋ฐ๊พธ๋ ๋ฐฉ๋ฒ์ ์ ์ํ ์ฝ๋. reducers๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์๋ ์ํ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
- `action` : reducers๋ฅผ ์คํํ๋ ํจ์ (dispatch๋ผ๋ redux ๋ด๋ถ์ ํจ์๋ก ์คํํ๋ค.)
๐ Redux ๋ฅผ ์ด๋ค ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์๊น?
์ฌ์ฉ๋ ์ปดํฌ๋ํธ๊ฐ ์ ๊ณ ์ปดํฌ๋ํธ ์ฌ์ด์ ์ํ ์ ๋ฌ์ด ์ ๋ค๋ฉด ์ค๋ฒ์คํ์ด ๋ ์ ์๋ค. ์คํ๋ ค ์ฌ์ฉํ์ง ์๋๊ฒ ๋ ์ข์ ์ ์๋ค.
๋จ, ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ค๊ฐ ์์ ์ปดํฌ๋ํธ์ ์๋ ์ํ๋ฅผ ๊ฐ์ ธ์ค๋ ์์ ์ ํ๋ ๊ฒ์ด ๋๋ฌด ๊ท์ฐฎ์ ๋จ๊ณ๊น์ง ๋์๋ค๋ฉด ์ฌ์ฉํ๋ฉด ์ข๋ค.
๐ Redux-ToolKit (RTK) ๋?
Redux ๊ณต์ ๊ฐ๋ฐ ํ์์ ๊ฐ๋ฐํ๊ณ , Redux๋ฅผ ๋ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
๊ณต์ ๋ฌธ์: https://redux-toolkit.js.org/
Redux Toolkit | Redux Toolkit
The official, opinionated, batteries-included toolset for efficient Redux development
redux-toolkit.js.org
๐ ์์ ์ฝ๋
import { nanoid, PayloadAction } from '@reduxjs/toolkit';
import { createSlice } from 'utils/@reduxjs/tookit';
const slice = createSlice({
name: 'todo',
initialState: [],
reducers: {
addTodo: {
reducer: (state, action: PayloadAction<TodoItem>) => {
state.todolist.push(action.payload);
},
prepare: (content: string) => {
const id = nanoid();
return { payload: { id, content, completed: false, editing: false } };
},
},
checkTodo: (state, action: PayloadAction<{ id: string; }>) {
const { id } = action.payload;
const todo = state.todolist.find(todo => todo.id === id);
if (todo) {
todo.completed = !todo.completed;
}
},
},
});
'Web > ์ํ ๊ด๋ฆฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก ํธ์๋ ์ํ๊ด๋ฆฌ (0) | 2022.02.10 |
---|