[리액트] Redux ToolKit 적용하기
2023. 4. 26. 17:31ㆍ개발/React
설치
해당 프로젝트 폴더에서 yarn add 명령어를 통해 툴킷 패키지를 설치한다.
yarn add @reduxjs/toolkit
Redux 소스코드 수정하기
src/redux/config/configStore.js
import { configureStore } from "@reduxjs/toolkit"
import counter from "../modules/counter";
const store = configureStore({
reducer : {
counter : counter,
}
})
export default store
스토어 소스코드 수정
- Toolkit을 사용하면 스토어, 루트리두스를 한번에 설정할 수 있다.
src/redux/modules/counter.js
import { createSlice } from "@reduxjs/toolkit"
/* 2-초기상태 설정 */
const initState = {
number : 0
}
/**
* 1.ToolKit의 createSlice({객체}) API를 통해
* 액션생성함수, 초기값, 리듀서를 한번에 만들 수 있다
* createSlice가 리턴하는 값을 담은 변수에서
* .reducer로 접근하면 리듀서를 가져올 수 있고
* .actions를 하면 액션생성함수에 접근 가능하다.
*
* reducers는 여러 리듀서를 가질 수 있기 때문에 객체를 받는다.
* reducers에 포함되어있는 객체의 키명과 동일하게 액션이 생성된다!!
*/
const counterSlice = createSlice({
name : 'counter',
initialState : initState,
reducers : {
increaseNumber : (state, action)=>{
state.number = state.number+1
},
decreaseNumber : (state, action)=>{
state.number = state.number-1
}
}
})
export const {increaseNumber, decreaseNumber} = counterSlice.actions
export default counterSlice.reducer
모듈 소스코드 수정
- 기존의 리듀서에서 액션타입을 정의하고 그 액션타입으로 액션생성함수를 정의, 초기값, 리듀서를 하나하나 정의하던것을 한번에 할 수있다.
- 초기값은 기존의 객체로 선언해둔 것을 그대로 사용하겠다.
- 구조분해할당을 통해서 각각 선언된 이름대로 할당을 해준뒤 export 해주겠다.
src/components/Counter.jsx
import React from 'react';
/**툴킷. 으로 만든 액션생성함수를 가져온다. */
import { increaseNumber, decreaseNumber } from '../redux/modules/counter';
function Counter() {
/* 7-useSelecter 를 통해 스토어의 값을 가져온다*/
const count = useSelector(state=>state.counter)
/* 8-useDisfatch를 사용해서 스토어의 값을 사용할수 있게 준비한다. */
const dispatcher = useDispatch()
/* 10-dispathcer를 통해 리덕스 모듈에 있는 액션생서함수에 접근한다. */
const onClickEventHandler = (e) => {
if(e.target.id === 'increase'){
console.log("증가버튼")
dispatcher(increaseNumber())
}else{
console.log("감소버튼")
dispatcher(decreaseNumber())
}
}
return (
<div>
<div>{count.number}</div>
<button id="increase" onClick={onClickEventHandler}>증가</button>
<button id="decrease" onClick={onClickEventHandler}>감소</button>
</div>
)
}
export default Counter;
컴포넌트 소스코드 수정
'개발 > React' 카테고리의 다른 글
[React] SSE (Server-Sent Events) 실시간 알림, Header에 값 담기 (0) | 2023.07.04 |
---|---|
[리액트] CRA로 리액트 프로젝트 생성 부터 Redux까지 (0) | 2023.04.26 |
[리액트] Hooks - useEffect (3) | 2023.04.25 |
[리액트] Hooks - useState (0) | 2023.04.24 |
[리액트] CSS in JS, Styled Components 란 (0) | 2023.04.17 |