๊ฐ์ธํ๋ก์ ํธ๋ฅผ ์งํํ ๋๋ ๊ณ์ props๋ก ์ฐ๊ฒฐ-์ฐ๊ฒฐํด์ ๋๊ฒจ์ผํ๋ ๊ฒ์ ๋ํด ๊ท์ฐฎ์๊ณผ .. ๊ทธ๋ ๊ฒ ๊ณ์ ์์์ผ๋ก ๋๊ธฐ๋ค๋ณด๋
์ฐ๊ด๋์ง ์์ ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ค๊น์ง ๋ฆฌ๋๋๋ง์ด ๋์ด์ผํ๋ ๊ฒ์ ๋ํด ๋ฌธ์ ๋ฅผ ๋๋ผ๊ณ ์๋ ์์ค
์ํ์ฝ๋ฉ ๋ฆฌ๋์ค ๊ฐ์๋ฅผ ํตํด ์๋ก์ด ์ํ ๊ด๋ฆฌ ๋ฐฉ๋ฒ์ ์๊ฒ ๋๊ณ , ์ด์ด ๋ฆฌ๋์ค ํดํท๊น์ง ์๊ฒ๋์๋ค.
redux
- js ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- store๋ผ๋ ํ๋๋ฟ์ธ ๋ฐ์ดํฐ ๊ณต๊ฐ
- action์ ํตํด์ ์ํ ๋ณ๊ฒฝ
- ๋ณ๊ฒฝ์ ์์ ํจ์๋ก๋ง ๊ฐ๋ฅ
๐ store
์ํ๊ฐ ๊ด๋ฆฌ๋๋ ํ๋์ ๊ณต๊ฐ
๐ action
store์ ์ด๋ฐํ ๋ฐ์ดํฐ
๐ reducer
action์ reducer๊ฐ ๋ฐ์ store์ ์ํ๋ฅผ ์ ๋ฐ์ดํธ
๐ dispatch
store์ ๋ด์ฅํจ์ ์ค ํ๋๋ก action์ ๋ฐ์์ํด
action์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํ๊ณ reducer๋ฅผ ํธ์ถ
๐ action ๊ฐ์ฒด๊ฐ dispatch()๋ฅผ ํตํด reducerํธ์ถ โก๏ธ reducer๋ ์๋ก์ด store๋ฅผ ์์ฑ
redux-toolkit
๋ฆฌ๋์ค ์ฌ์ฉ์ ๋ ์ฝ๊ฒ ์ด์ฉํ๊ธฐ ์ํ ๋๊ตฌ & ์ ์ฒด์ ์ธ ์ฝ๋๋์ ์ค์
์ฌ์ฉ
npm install @reduxjs/toolkit
store.js
import { configureStore } from "@reduxjs/toolkit";
import dateReducer from "./dateSlice";
const store = configureStore({
reducer: {
date: dateReducer,
},
});
export default store;
configureStore()๋ฅผ ํตํด store์์ฑ
dateSlice.js
import { createSlice } from "@reduxjs/toolkit";
import dayjs from "dayjs";
const dateSlice = createSlice({
name: "date",
initialState: {
date: dayjs().format("YYYY-MM-DD"),
},
reducers: { // reducers 's' ๋ถ๋๊ฑฐ ์ฃผ์
setDate: (state, action) => {
state.date = action.payload;
// ์๋ ์์ฑ๋๋ actionCreate๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํ๋ฉด payload๋ก ๋ฐ์์ผํจ
// ๋ถ๋ณ์ฑ ์ ์งํ ํ์์
},
resetDate: (state) => {
state.date = dayjs().format("YYYY-MM-DD");
},
},
});
export default dateSlice.reducer;
export const { setDate, resetDate } = dateSlice.actions;
์ํ ์ฌ์ฉ
const date = useSelector((state) => state.date.date); // useSelector๋ฅผ ํตํด ๊ฐ์ ธ์ด state.(name).(value)
const dispatch = useDispatch();
// dispatch(์ก์
์ด๋ฆ(newState)) ์ฒ๋ผ ์๋ ์ฌ์ฉ
<StaticDatePicker value={dayjs(date)} onChange={(e) => dispatch(setDate(e.format("YYYY-MM-DD")))} />