react 에서 redux-toolkit 을 사용하기 위해서는 '@reduxjs/toolkit' 과 'react-redux' package를 설치해줘야한다.
npm install @reduxjs/toolkit react-redux
그리고 이전에 state를 호출하기 위한 getState와 action을 호출하기위한 dispatch를 사용하는 것 대신 'react-redux'의 useSelector와 useDispatch를 사용하면 된다. typescript의 type 미적용시 기본적인 사용법은 다음과 같다.
// src/features/icecream/IcecreamView.tsx
// type 미지정
import React from 'react';
import { useSelector, useDispatch } from 'react-redux'
import { ordered } from './icecreamSlice'
export const IcecreamView = () => {
const numOfIcecream = useSelector(state => state.icecream.numOfIcecream
const dispatch = useDispatch()
return(
<div>
<h2> Num of icecream - {numOfIcecream} </h2>
<button onClick={()=>dispatch(ordered())}>Order icecream</button>
</div>
)
}
typescript의 type을 지정해야한다면, store로부터 store states type과 dispatch type을 반환하도록 설정하고 이를 custom hook으로 custom useSlector와 useDispatch를 만들도록 한다.
그리고 위의 IcecreamView.tsx 에서 react-redux 의 useSelector, useDispatch를 사용하는 대신 customhook의 useAppSelector, useAppDispatch를 사용하도록 하면된다.
import { configureStore } from '@reduxjs/toolkit'
import cakeReducer from '../features/cake/cakeSlice'
import icecreamReducer from '../features/icecream/icecreamSlice'
const store = createStore({
reducer:{
cake:cakeReducer,
icecream: icecreamReducer
}
})
export default store
export type RootState = ReturnType<typeof store.getState>
export type AppDispatch = typeof store.dispatch
//src/app/hooks.ts
import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux'
import type { RootState, AppDispatch } from './store'
export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector
export const useAppDispatch= () => useDispatch<AppDispatch>()
'React' 카테고리의 다른 글
Redux toolkit - extraReducers(2) - redux thunk (0) | 2022.05.15 |
---|---|
Redux toolkit - extraReducers(1) - module (0) | 2022.05.15 |
Redux toolkit - Redux toolkit 기본 (0) | 2022.05.15 |
Redux toolkit - redux 기본 (0) | 2022.05.15 |
blog 만들기 - husky v7, lint-staged, eslint, prettier (0) | 2022.04.12 |