๋ฆฌ๋์ค ์คํ ์ด๋ฅผ ๋ฆฌ์กํธ ์ฑ์ ์ ๊ณตํ๊ธฐ ์ํด์ ์ฃผ๋ก index.js ํ์ผ๋ก ๊ฐ๋ค. ๊ฑฐ๊ธฐ์ ์ ์ฒด ์ฑ์ ๋ ๋ํ๋ค. (์ปดํฌ๋ํธ ํธ๋ฆฌ์ ๊ฐ์ฅ ์์ชฝ)
๊ฑฐ๊ธฐ์ root ์ปดํฌ๋ํธ๋ฅผ ๋ ๋ํ๋ค.
์ปดํฌ๋ํธ์ ๋๋ถ๋ถ์ด ์คํ ์ด์ ์ ๊ทผํด์ผ ํ๋ค๋ฉด, ๊ฐ์ฅ ๋์ ๋ ๋ฒจ์์ <Provider>๋ฅผ ์ ๊ณตํด์ผํ๋ค.
import React from "react";
import ReactDOM from "react-dom";
import { Provider } from "react-redux";
import "./index.css";
import App from "./App";
import store from "./store/index";
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById("root")
);
๐ App์ ์๋ ๋ชจ๋ ์ปดํฌ๋ํธ๋ store์ ํญ ๋ ์ ์๋ค.
โฅ store ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค. subscription์ ์ค์ ํ ์ ์๋ค. ์ก์ ๋ dispatch ํ ์ ์๋ค.
import { useSelector } from "react-redux";
{store} ๋ณด๋ค {useSelector}๊ฐ ๋ ํธํ๋ค! ๊ทธ ์ด์ ๋ {useSelector}๋ ์๋์ผ๋ก ์ํ์ ์ผ๋ถ๋ฅผ ์ ํํ๊ฒ ํด์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
{useSelector}๋ก ์คํ ์ด๊ฐ ๊ด๋ฆฌํ๋ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๋ค.
useSelector()๋ ํจ์๋ฅผ ๋ณด๋ด์ผ ํ๋๋ฐ, ๊ทธ ํจ์๋ ๋ฆฌ๋์ค๊ฐ ๊ด๋ฆฌํ๋ ์ํ๋ฅผ ๋ฐ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ํ์ ์ผ๋ถ๋ฅผ ๋ฆฌํดํ๋ค. (์ฌ๊ธฐ์๋ state.counter)
useSelector()๋ฅผ ์ฐ๋ฉด ์ข์๊ฒ, ๋ฆฌ์กํธ ๋ฆฌ๋์ค๊ฐ ์๋์ผ๋ก ์๋ธ์คํฌ๋ฆฝ์ ์ ์ค์ ํ๋ค๋ ๊ฒ! ๐ ๊ทธ๋์ ๋ฆฌ๋์ค ์คํ ์ด์์ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋ ๋๋ง๋ค ์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ ๋๊ณ ์๋์ผ๋ก ๊ฐ์ฅ ์ต์ ์ ์นด์ดํฐ๋ฅผ ๋ฐ๋๋ค.
๋ฆฌ๋์ค์์ ๊ฐ์ฅ ์ค์ํ๊ฒ!!
์ ๋ ๊ธฐ์กด์ state๋ฅผ ๋ณ๊ฒฝํด์๋ ์๋๋ค!!
๋์ ์๋ก์ด state ๊ฐ์ฒด๋ฅผ ๋ฐํํด์ ํญ์ ์ฌ์ ์ํด์ผํ๋ค.
์์ธก ๋ถ๊ฐ๋ฅํ ๋์์ด ๋ฐ์ํ ์ ์๊ณ , ํ๋ก๊ทธ๋จ์ ๋๋ฒ๊น ํ๋ ๊ฒ๋ ์ด๋ ค์ ์ง ์ ์๋ค.
๋ฒ๊ทธ๊ฐ ๋ฐ์ํ์ง ์๋๋ผ๋ state๊ฐ ๋๊ธฐํ ๋์ง ์๋ ๋ ํฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์๊ธฐ์น ์์ side effect๊ฐ ์๊ธธ ์ ์๊ณ , ๊ฐ์๊ธฐ UI๊ฐ ๋์ด์ state๋ฅผ ์ ํํ ๋ฐ์ํ์ง ์์ ์๋ ์๋ค.
const firstReducer = (state = initialState, action) => {
if (action.type === "increment") {
state.counter++;
return {
counter: state.counter,
showCounter: state.showCounter,
};
}
์ด๋ ๊ฒ ์ฐ๋ฉด ์๋๋ค!!
๊ฐ์ฒด์ ๋ฐฐ์ด์ด ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฐธ์กฐ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ ๊ธฐ์กด์ state๋ฅผ ๋ณํ์ํจ๋ค.
โญ๏ธโญ๏ธ๋ฐ๋ผ์ ์ค์ฒฉ๋ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ๊ฑฐ๋ ์ญ์ ํ ๋๋ ํญ์ ์๋ก์ด ๊ฐ์ฒด๋ ๋ฐฐ์ด์ ๋ฐํํ๊ธฐ!โญ๏ธโญ๏ธ
const firstReducer = (state = initialState, action) => {
if (action.type === "increment") {
return {
counter: state.counter + 1,
showCounter: state.showCounter,
};
}
์ด๊ฒ ๋ง๋ค
ํนํ ์ค์ฒฉ๋ ๊ฐ์ฒด์ ๋ฐฐ์ด์ ๊ฐ์ง state์ ๊ฒฝ์ฐ ๊ธฐ์กด์ state๋ฅผ ์ค์๋ก ๋ณํ์ํฌ ์ ์๋ค. ์ ์ํ๊ธฐ!
๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํ ๋๋ง๋ค ๊ธฐ์กด ๊ฐ์ฒด๋ก ๊ฐ์ ๊ฐ์ฒด ์์ฑ์ด ์กฐ์๋์ง ์๋๋ก ํด์ผํ๋ค!