โconfigureStore์์ composeWithDevtools๋ฅผ ์ฐ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
๊ฐ๋ฐ์ ๋๊ตฌ์์ Redux๋ฅผ ์ฐพ์ ์ ์์๋ค. ๊ฐ์ฌ๋ ์ฝ๋์ ๋ค๋ฅด๊ฒ ์์ฑํ๊ฒ ์๋๋ฐ...๋ฌด์จ ์ฐจ์ด์ผ๊น ๊ณ ๋ฏผํด๋ณด์๋๋ฐ ์ผ๋จ extension ์ค์น๋ถํฐ ๋์ด์์ง ์์๋ค. ํ์ฅ ํ๋ก๊ทธ๋จ์ ์ค์น ํ ํ, ๋ค๋ฅธ ๋ธ๋ก๊ทธ ๊ธ์์ ๋ณธ ์์ ๋๋ก store ์์ฑ ์ฝ๋์์ composeWithDevtools๋ฅผ ์ถ๊ฐํด์ฃผ์๋ค.
์๋ํ ์ฝ๋:
const store = configureStore({
reducer,
composeWithDevtools,
})
์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ๋๋ถ๋ถ์ ์์ ์์๋ createStore์ ์ฌ์ฉํ๋ฉฐ composeWithDevTools๋ฅผ importํด ์ ์ฉํ๊ณ ์์๊ณ , ๋๋ Redux Toolkit์ configureStore๋ฅผ ์ฌ์ฉํ๊ณ ์์๋ค.
๊ทธ๋ ๋ค๋ฉด, configureStore์์๋ ๋น์ทํ๊ฒ ์ต์ ์ผ๋ก ๋๊ธฐ๋ฉด ๋๊ฒ ๊ตฌ๋, ๋ผ๋ ์ถ์ธก์ ํ์๊ณ , configureStore์ ์ธ์๋ก composeWithDevtools๋ฅผ ๋๊ฒจ์ฃผ์๋ค.
๊ฒฐ๊ณผ๋, Typescript ์๋ฌ
์์ธ: configureStore์ Devtools๋ฅผ ์ด๋ฏธ ํฌํจํ๋ค.
Redux Toolkit์ Redux๋ฅผ ์ฐ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค์๋ ์ค์ ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ํด๊ฒฐํ์๋ ์ฒ ํ์ ๊ฐ์ง๊ณ ์๋ค. ๊ทธ๋์ configureStore์๋ ๋ค์ ๊ธฐ๋ฅ๋ค์ด ๊ธฐ๋ณธ์ ์ผ๋ก ๋ด์ฅ๋์ด ์๋ค.
- Redux DevTools ์ฐ๋
- thunk middleware ํฌํจ
- ๊ฐ๋ฐ/ํ๋ก๋์ ํ๊ฒฝ ๋ถ๊ธฐ ์ฒ๋ฆฌ
์ฆ,
const store = configureStore({
reducer,
})
์ด ํ ์ค๋ง์ผ๋ก๋ Redux DevTools ์ฐ๊ฒฐ๊ณผ middleware ์ค์ ์ด ๋ชจ๋ ์๋์ผ๋ก ์ด๋ฃจ์ด์ง๋ค. ๋ฐ๋ผ์ composeWithDevTools๋ฅผ ์ฌ์ฉํ ์ด์ ๋ ์๊ณ , ์ ์ด์ configureStore์ ์ต์ ์ผ๋ก ์กด์ฌํ์ง๋ ์๋๋ค.
configureStore๊ฐ ๋ฐ์ ์ ์๋ ์ฃผ์ ์ต์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- reducer
- middleware
- devTools
- preloadedState
- enhancers
configureStore์ ์ด๋ค๋ฉด, devtools ์ฌ์ฉ์ ์ํด ๋ณ๋๋ก ์ค์ ์ ํ ํ์๊ฐ ์์ง๋ง, ๊ทธ๋๋ ์ง์ ์ ์ดํ๊ณ ์ถ๋ค๋ฉด compose๊ฐ ์๋, ์๋์ ๊ฐ์ด ์ต์ ์ผ๋ก ์กฐ์ ํด์ผ ํ๋ค.
const store = configureStore({
reducer,
devTools: {
trace: true,
name: 'My App Store',
},
})
๐Boardlist ์ปดํฌ๋ํธ ๊ตฌํ๊ณผ FC ํ์
์๋๋ BoardList ์ปดํฌ๋ํธ์ ์ผ๋ถ์ด๋ค.
type TBoardListProps = {
activeBoardId: string;
setActiveBoardId: React.Dispatch<React.SetStateAction<string>>;
}
const BoardList: FC<TBoardListProps> = ({
activeBoardId,
setActiveBoardId
}) => {
const board = useTypedSelector(state => state.boards.boardArray);
const [isFormOpen, setIsFormOpen] = useState(false);
}
์ด ์ปดํฌ๋ํธ๋ ๋ถ๋ชจ๋ก๋ถํฐ
- ํ์ฌ ํ์ฑํ๋ ๋ณด๋ ID(activeBoardId)
- ํด๋น ๊ฐ์ ๋ณ๊ฒฝํ๋ ํจ์(setActiveBoardId)
๋ฅผ props๋ก ์ ๋ฌ๋ฐ๋ ๊ตฌ์กฐ์ด๋ค.
์ฌ๊ธฐ์ ๋์ ๋๋ ์ ์ ์ปดํฌ๋ํธ ํ์ ์ผ๋ก FC๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ ๊ฒ์ด๋ค.
FC๋?
type FC<P = {}> = React.FunctionComponent<P>
FC๋ props ํ์ ์ด P์ธ React ํจ์ ์ปดํฌ๋ํธ๋ฅผ ์๋ฏธํ๋ค.
const BoardList: FC<TBoardListProps>
์ฆ, ์ด ์ฝ๋์ ๋ป์
'BoardList๋ React ์ปดํฌ๋ํธ์ด๋ฉฐ, TBoardListProps ํ์ ์ props๋ฅผ ๋ฐ๋๋ค' ๋ผ๋ ์๋ฏธ๋ก ํ์ ์ ๋ช ์ํ ๊ฒ์ด๋ค.
const BoardList = ({
activeBoardId,
setActiveBoardId
}: TBoardListProps) => {
...
}
์ด ์ฝ๋๋ ๋์์ ์์ ํ ๋์ผํ๊ธฐ๋ ํ๋ค.
๋ค๋ง FC๋ฅผ ์ฌ์ฉํ๋ฉด "์ด ํจ์๋ ์ปดํฌ๋ํธ๋ค"๋ผ๋ ์๋๋ฅผ ํ์ ์ฐจ์์์ ํ ๋ฒ ๋ ๊ฐ์กฐํ๋ ํจ๊ณผ๊ฐ ์๊ธดํ๋ค. ์ต๊ทผ์๋ FC ์ฌ์ฉ์ ์ง์ํ๋ ๊ฒฝ์ฐ๋ ๋ง๋ค๊ณ ํ๊ณ , ๊ฐ์ ์์์ด ๋ค์ ์ค๋๋ ํธ์ด๋ผ ์์ ๊ดํ์ด ๋ฐ์๋ ํจํด์ผ๋ก ๋ณด์ด๊ธฐ๋ ํ๋ค...
๐React.Dispatch<React.SetStateAction<string>>
SetStateAction<T>์ ์ ์๋ ๋ค์๊ณผ ๊ฐ๋ค.
type SetStateAction<T> = T | ((prevState: T) => T)
์ฆ setState๋ ๋ ๊ฐ์ง ๋ฐฉ์์ ๋ชจ๋ ํ์ฉํ๋ค.
setActiveBoardId("board-1") // ์ง์ ๊ฐ ์ ๋ฌ
setActiveBoardId(prev => prev + "1") // ์ด์ ๊ฐ ๊ธฐ๋ฐ ์
๋ฐ์ดํธ
์ด๋ฅผ ๊ฐ์ธ๋ Dispatch<A>๋ ๋ค์๊ณผ ๊ฐ์ ํ์ ์ด๋ค.
type Dispatch<A> = (value: A) => void
์ด๋ค ๊ฐ์ ๋ฐ์์ ์ํ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐํ(dispatch)ํ๋ ํจ์์ด๋ค. ๊ฒฐ๊ตญ ๋ ํ์ ์ ํฉ์น๋ฉด,
string ์ํ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ setStateํจ์
๋ฅผ ์๋ฏธํ๊ฒ ๋๋ค.
Redux toolkit์ด ์ ์ด๋ฐ api๋ฅผ ์ ๊ณตํ๋์ง, ์ํ๊ด๋ฆฌ์์์ typescript ์ ์ฉ์ ์กฐ๊ธ ๋ ๋ช ํํ๊ฒ ์ดํดํ ์ ์์๋ค. ์ด์ ๊น์ง ์ ์์ง๋ชปํ๋ ์๋ก์ด ํ์ ํ์ฉ์ ๋ฐฐ์ฐ๋ฉด์ ์์ ์ ์ด๊ณ ๋ช ์์ ์ธ ํ์ ์ ์๋ผ๋ ํ์ ์คํฌ๋ฆฝํธ์ ์ฒ ํ์ ๋ค์ ํ๋ฒ ๋๋ ์ ์๋ ๊ณ๊ธฐ๊ฐ ๋๊ธฐ๋ ํ ๋ฏ. ๊ทธ์น๋ง ํ์ ์ด๋ ค์
'๐๏ธํ๋ก๊ทธ๋๋จธ์ค ๋ฐ๋ธ์ฝ์ค > TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [๋ฐ๋ธ์ฝ์ค] book store 3 (0) | 2025.06.24 |
|---|---|
| [๋ฐ๋ธ์ฝ์ค] book store 2 (0) | 2025.06.23 |
| [๋ฐ๋ธ์ฝ์ค] React-Task-App: Redux์ ํ์ ์์ ์ฑ (0) | 2025.06.17 |
| [๋ฐ๋ธ์ฝ์ค] Redux (2) | 2025.06.16 |
| [๋ฐ๋ธ์ฝ์ค] React ๊ธฐ์ด ํต์ฌ ์ ๋ฆฌ(state, ๊ตฌ์กฐ ๋ถํด ํ ๋น, ์ปดํฌ๋ํธ ๋ฐ๋ณต) (2) | 2025.06.15 |