React_useDispatch, useSelector
๐ ๋ฆฌ๋์ค์ ํ๋ฆ
UI : ์ปดํฌ๋ํธ (App.jsx)
- UI์์ ์ด๋ค ์ด๋ฒคํธ๊ฐ ์ผ์ด๋๋ค. (์๋ฅผ ๋ค์ด ํด๋ฆญ ์ด๋ฒคํธ)
- ์ค์ ๋ฐ์ดํฐ ๊ด๋ฆฌ์(Store)์ ์๋ State ๊ฐ์ ๋ฐ๊ฟ์ผ ํ๋ค ๋ผ๋ ์์ฒญ์ด ๋ค์ด์จ๋ค.
- Dispatch๊ฐ ์์ฒญ์ ์ํํด์ค๋ค. action ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ store์ ๋ฐฉ๋ฌธํ๋ค.
- ์ค์ ๋ฐ์ดํฐ ๊ด๋ฆฌ์์ action์ ์์ฒญํ๋, action์ ๋์ ธ์ฃผ๋ ๋์ด Dispatch๋ค.
- action์ type๊ณผ payload๋ฅผ ๊ฐ์ง๋ ๊ฐ์ฒด์ด๋ค.
- store๋ action๊ฐ์ฒด์ ์๋ type์ ๋ฐ๋ผ state๋ฅผ ๋ณ๊ฒฝํด์ฃผ๋ ์์ ์ ํ๋ค.
๐ ๋ฆฌ๋์์๊ฒ ๋ณด๋ผ ๋ช ๋ น ๋ง๋ค๊ธฐ
๋ฆฌ๋์์์ ๋ด๊ฐ ์ด๋ค Action์ ํ๊ธธ ์ํ๋ค ๋ผ๊ณ ํํํ๋ค. ํ๋์ ์ฝ๋๋ก ๋ํ๋ด๋ฉด ๊ฐ์ฒด๋ก ๋ง๋ ๋ค. = ์ก์ ๊ฐ์ฒด
์ก์ ๊ฐ์ฒด๋ ๋ฐ๋์ Type์ด๋ผ๋ key๋ฅผ ๊ฐ์ง๋ค. โ๏ธ
์ก์ ๊ฐ์ฒด๋ฅผ ๋ฆฌ๋์์๊ฒ ๋ณด๋์ ๋ ๋ฆฌ๋์๋ ๊ฐ์ฒด ์์์ type์ด๋ผ๋ key๋ฅผ ๋ณด๊ธฐ ๋๋ฌธ์ด๋ค.
๐ ๋ช ๋ น(์ก์ ๊ฐ์ฒด) ๋ณด๋ด๊ธฐ
์ก์ ๊ฐ์ฒด๋ฅผ ๋ฆฌ๋์๋ก ๋ณด๋ด๊ธฐ ์ํด์ useDispatch๋ผ๋ ํ ์ ์ฌ์ฉํ๋ค.
react-redux์์ importํด์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ก์ ๊ฐ์ฒด๋ฅผ ๋ฆฌ๋์๋ก ๋ณด๋ด์ฃผ๋ ์ญํ ์ ํ๋ ํ ์ด๋ค.
// src/App.js
import React from "react";
import { useDispatch } from "react-redux"; // import ํด์ฃผ์ธ์.
const App = () => {
const dispatch = useDispatch(); // dispatch ์์ฑ
return (
<div>
<button>+ 1</button> {/* ๋ฒํผ์ ํ๋ ์ถ๊ฐํด์ฃผ์ธ์. */}
</div>
);
};
export default App;
๋ฒํผ์ ํด๋ฆญํ์ ๋ +1 ์ด ๋๋ ์ก์ ๊ฐ์ฒด๋ฅผ ๋ณด๋ด๊ณ ์ถ๋ค๋ฉด
// src/App.js
import React from "react";
import { useDispatch } from "react-redux"; // import ํด์ฃผ์ธ์.
const App = () => {
const dispatch = useDispatch(); // dispatch ์์ฑ
return (
<div>
<button
// ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ถ๊ฐ
onClick={() => {
// ๋ง์ฐ์ค๋ฅผ ํด๋ฆญํ์ ๋ dispatch๊ฐ ์คํ๋๊ณ , ()์์ ์๋ ์ก์
๊ฐ์ฒด๊ฐ ๋ฆฌ๋์๋ก ์ ๋ฌ๋๋ค.
dispatch({ type: "PLUS_ONE" });
}}
>
+ 1
</button>
</div>
);
};
export default App;
๐ useSelector๋ก ๋ณ๊ฒฝ๋ stater๊ฐ ํ์ธํ๊ธฐ
// src/App.js
import React from "react";
import { useDispatch, useSelector } from "react-redux";
const App = () => {
const dispatch = useDispatch();
// ๐ ์ฝ๋ ์ถ๊ฐ
const number = useSelector((state) => state.counter.number);
console.log(number); // ์ฝ์ ์ถ๊ฐ
return (
<div>
{/* ๐ ์ฝ๋ ์ถ๊ฐ */}
{number}
<button
onClick={() => {
dispatch({ type: "PLUS_ONE" });
}}
>
+ 1
</button>
</div>
);
};
export default App;
๐ ์ ๋ฆฌ
- ์ก์ ๊ฐ์ฒด๋, ๋ฐ๋์ type์ด๋ key๋ฅผ ๊ฐ์ ธ์ผ ํ๋ ๊ฐ์ฒด์ด๋ค. ๋ํ ๋ฆฌ๋์๋ก ๋ณด๋ผ “๋ช ๋ น"์ด๋ค.
- ๋์คํจ์น๋, ์ก์ ๊ฐ์ฒด๋ฅผ ๋ฆฌ๋์๋ก ๋ณด๋ด๋ “์ ๋ฌ์” ํจ์์ด๋ค.
- ๋ฆฌ๋์๋, ๋์คํจ์น๋ฅผ ํตํด ์ ๋ฌ๋ฐ์ ์ก์ ๊ฐ์ฒด๋ฅผ ๊ฒ์ฌํ๊ณ , ์กฐ๊ฑด์ด ์ผ์นํ์ ๋ ์๋ก์ด ์ํ๊ฐ์ ๋ง๋ค์ด๋ด๋ “๋ณํ๋ฅผ ๋ง๋ค์ด๋ด๋" ํจ์์ด๋ค.
- ๋์คํจ์น(dispatch)๋ฅผ ์ฌ์ฉํ๊ธฐ์ํด์๋ useDispatch() ๋ผ๋ ํ
์ ์ด์ฉํด์ผ ํ๋ค.
- ๋์คํจ์น๋ ์คํ ์ด์ ๋ด์ฅํจ์ ์ค ํ๋์ ๋๋ค.
- ์ฐ์ , ๋์คํจ์น๋ ์ก์ ์ ๋ฐ์ ์ํค๋ ๊ฒ ์ ๋๋ก ์ดํดํ์๋ฉด ๋ฉ๋๋ค.
- dispatch ๋ผ๋ ํจ์์๋ ์ก์ ์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํฉ๋๋ค.. dispatch(action) ์ด๋ฐ์์ผ๋ก ๋ง์ด์ฃ .
- ์ก์ ๊ฐ์ฒด type์ value๋ ๋๋ฌธ์๋ก ์์ฑํ๋ค. (JS์์ ์์๋ ๋๋ฌธ์๋ก ์์ฑํ๋ ๋ฃฐ์ด ์์)