개요
React로 컴포넌트를 분리해서 사용하게 되면서 상태 관리의 필요성을 느꼈습니다.
React-Redux
중앙 상태 관리 라이브러리이다.
React-Redux-Tookit?
state와 reducer를 파일 단위로 분리하고, 이름을 줘서, store에서 사용할 state와 reducer를 기능별 또는 정의별로 분리해서 관리할 수 있게 해준다.
자동으로 store에 분리된 store들을 하나로 세팅해 준다.
튜토리얼
1. redux tookit와 react redux 설치
npm i @reduxjs/toolkit react-redux
2. Redux Store 만들기
configureStore를 사용해서 Redux store를 만듭니다.
configureStore는 reducer 함수를 받습니다.
configureStore는 자동으로 store 세팅을 해줍니다.
import { configureStore } from '@reduxjs/toolkit'
export default configureStore({
reducer: {},
})
src/app/store.js에 Redux Tookit으로 configureStore API를 임포트합니다. 그리고 반환합니다.
<App />에 React Redux <Provider> 컴포넌트를 넣으면 됩니다.
<Provider store={store}> 형태로 Redux store를 전달하면 됩니다.
3. React Store를 React에 제공하기
React Redux <Provider>를 React Component에 넣으면 app에서 store를 사용할 수 있게 됩니다.
import React from 'react'
import ReactDOM from 'react-dom'
import App from './App'
import store from './app/store'
import { Provider } from 'react-redux'
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>
document.getElementById('root')
)
4. createSlice로 Redux 'slice' reducer를 만든다.
Redux slice는 Vue의 Vuex store의 modules과 같다. slice를 사용해서 state value와 상태 변경을 정의할 reducer를 정의할 수 있다.
slice reducer 만들기
// features/counter/counterSlice.js
import { createSlice } from '@reduxjs/tookit'
export const counterSlice = createSlice({
name: 'counter',
initialState: {
value: 0,
},
reducers: {
increment: (state) => {
// Redux Tookit은 'mutating'로직을 reducer에서 사용할 수 있다.
// immer library를 사용하기 때문에 실제로 state를 mutate하고 있지 않다.
// 즉, '초기상태'(draft state)의 변화를 감지하고, 완전히 새로운 불변 상태(brand new immutable state)를 생성합니다.
state.value += 1
},
decrementL (state) => {
state.value -= 1
},
incrementByAmount: (state, action) => {
state.value += action.payload
}
}
})
// Action creators are generated for each case reducer function
export const { increment, decrement, incrementByAmount } = counterSlice.
export counterSLicer.reducer
store에 slice reducer 추가하기
// add/store.js
import { configureStore } from '@reduxjs/toolkit'
import counterReducer from '../features/counter/counterSlice'
export default configureSotre({
reducer: {
counter: counterReducer,
}
})
5. React Hooks인 React Redux useSelector/useDispatch를 사용한다.
- useSelector hook을 사용해서 store로부터 데이터를 읽으면 된다.
- useDispatch hook을 사용해서 dispatch를 사용하면 된다. 필요한 만큼 dispatch actions를 사용하면 된다.
store와 components를 connect하는 방법
react-redux에 connect API를 export함.
src/routes/Home.tsx
import { connect } from 'react-redux';
interface RootState {
state: {text:string, id:string}
}
// ...
fuction getCurrentState(state: RootState['state']) {
return {state}
}
export default connect(getCurrentState)(Home);
'React' 카테고리의 다른 글
[NEXTJS] style jsx 설정 방법 (0) | 2022.01.16 |
---|---|
[react] memo (0) | 2021.12.29 |
깃허브 페이지 creat-react-app 배포하기 (0) | 2021.11.28 |
깃허브 페이지 creat-react-app 배포하기 (0) | 2021.11.27 |
[Redux] Redux란? (0) | 2021.11.26 |
댓글