๐ Redux
props ์์ด state๋ฅผ ๊ณต์ ํ ์ ์๊ฒ ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
npm install @reduxjs/toolkit react-redux
ํฐ๋ฏธ๋์ ์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ ์ค์นํ๋ค
// store.js
import { configureStore } from '@reduxjs/toolkit'
export default configureStore({
reducer: { }
})
state
๋ค์ ๋ณด๊ดํ ํ์ผ์ธ store.js
๋ฅผ ์์ฑํด์ ์ ์ฝ๋๋ฅผ ์
๋ ฅํด์ค๋ค
// index.js
import { Provider } from "react-redux";
import store from './store.js'
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<Provider store={store}>
<BrowserRouter>
<App />
</BrowserRouter>
</Provider>
</React.StrictMode>
);
index.js
ํ์ผ์ Provider ์ปดํฌ๋ํธ
์ ๋ฐฉ๊ธ ๋ง๋ค์ด์ค store
ํ์ผ์ import
ํ๊ณ , App ์ปดํฌ๋ํธ
๋ฅผ Provider ์ปดํฌ๋ํธ
๋ก ๊ฐ์ธ์ค๋ค
๐ App ์ปดํฌ๋ํธ๋ฅผ ํฌํจํ ๋ชจ๋ ์์ ์ปดํฌ๋ํธ๋ค
์ store
์ ์๋ state
๋ค์ ๊ฐํธํ๊ฒ ๊บผ๋ด์ธ ์ ์๋ค
// store.js
import { configureStore, createSlice } from '@reduxjs/toolkit'
let user = createSlice({
name : 'user',
initialState : {name : 'kim', age : 20},
reducers : {
changeName(state){
state.name = 'park'
}
})
export let {changeName} = user.actions
export default configureStore({
reducer: {
user : user.reducer
}
})
store.js
ํ์ผ์ createSlice
๋ฅผ import
ํ๋ค
user state
๋ฅผ ๋ง๋ค๊ธฐ ์ํด, ๋ณ์ user๋ฅผ ์ ์ธํ๊ณ {name: 'state์ด๋ฆ', initialState: 'state๊ฐ', reducers: {ํจ์} }
์ ์
๋ ฅํ๋ค
๋ค๋ฅธ ์ปดํฌ๋ํธ์์ ํจ์๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด slice์ด๋ฆ.actions
๋ก export
ํด์ค๋ค
๋ง๋ค์ด์ค state๋ configureStore
์ {state์ด๋ฆ.reducer}
๋ก ๋ฑ๋กํ๊ณ , export
ํด์ค๋ค
// Cart.js
import { useDispatch, useSelector } from 'react-redux'
state๋ฅผ ์ฌ์ฉํ ์ปดํฌ๋ํธ์ useDispatch
์ useSelector
๋ฅผ import
ํ๋ค
// Cart.js
let state = useSelector((state) => state)
console.log(state)
let dispatch = useDispatch()
state
๋ผ๋ ๋ณ์๋ฅผ ์ ์ธํด, useSelector
๋ก store์ ์๋ ๋ชจ๋ state๋ค์ ํ ๋นํ๋ค
์ state๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด, dispatch
ํจ์๋ฅผ ์ ์ธํ๋ค
store.js
์ ํจ์๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ฐ๋์ dispatch
๋ก ๊ฐ์ธ์ ์ฌ์ฉํด์ผ ํจ!
//Cart.js
import { changeName } from "./../store.js"
์ฌ์ฉํ ํจ์๋ import
ํด์ผ ํ๋ค
// Cart.js html ๋ถ๋ถ
return (
<div>
{state.user.name} {state.user.age}์ ์ฅ๋ฐ๊ตฌ๋
<button onClick={() => {
dispatch(changeName())
}}>๋ฒํผ</button>
{}
์์ user state
์ ์ด๋ฆ๊ณผ ๋์ด๋ฅผ ๋ถ๋ฌ์ค๊ณ , ๋ฒํผ์ ํด๋ฆญํ๋ฉด changeName
ํจ์๊ฐ ์คํ๋๊ฒ ํ๋ค