3. Follow Redux
Redux
Reflect
๊ฐ์ ์ ๋ฆฌ
Redux ๋ฐ๋ผํ๊ธฐ
์ฝ๋๋ฅผ ์์ฑํ๋ ์์ฃผ๋ก ์งํํ๋ค.
github์ external-store folder์ ํด๋น ๋ด์ฉ์ ์ ๋ฆฌํ๋ค.
์ฐ์ , ํ์ ์คํฌ๋ฆฝํธ์ ์ ๋ค๋ฆญ์ ๋ํด ์ ์์ง ๋ชปํ๋ค๋ฉด ํ์ ์ ์ง์ ํ๋ ๋ถ๋ถ์์ ๊ฝค ์ด๋ ต๊ฒ ๋๋์๋ ์์ ๊ฒ ๊ฐ๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ์ ์ถ์ํ ์์ค์ด ๋์ ์ฝ๋, ๋ก์ฐ ๋ ๋ฒจ์ ์ฝ๋๋ฅผ ์์ฑํ๋ค ๋ณด๋ฉด ํ์ ์ ๋จผ์ ์ก์์ค ์ ์๋ค. ์ ๋ค๋ฆญ์ ํ์ฉํ์ฌ ํ์ ์ ์์ ์ ์ผ๋ก ์ก์์ฃผ๋๊ฒ ์ค์ํ๋ค.
action์ ๊ธฐ๋ณธ์ ์ผ๋ก type์ ๊ฐ์ง๋ค. type์ ์ ์ธ์ ์ผ๋ก state๋ฅผ ์ด๋ป๊ฒ ๋ณ๊ฒฝ์ํฌ ๊ฒ์ธ์ง๋ฅผ ๋ํ๋ธ๋ค. state๋ฅผ ๋ณ๊ฒฝ์ํค๋ ๊ฒฝ์ฐ์ action์ ํน์ ๊ฐ์ ์ ๋ฌํด์ค ์ ์๋๋ฐ ์ผ๋ฐ์ ์ผ๋ก payload๋ผ๋ ๋ค์ด๋ฐ์ ์ฌ์ฉํ๋ค. redux์์ payload๋ก ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ค.
payload์ ํ์ ์ ๋จผ์ ์ก์์ค ์ ์๊ธฐ ๋๋ฌธ์, Action ํ์ ์ ์ฌ์ฉํ๋ ์ชฝ์์ ์ก์์ค ์ ์๋๋ก ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ค.
export type Action<Payload> = {
type: string;
payload?: Payload;
};
reducer๋ ๊ธฐ์กด์ state์ action์ ๋ฐ๋๋ค. reducer๋ action์ ๋ฐ๋ผ์ state๋ฅผ ๋ณํ์ํค๊ณ , ์๋ก์ด state๋ฅผ ๋ฐํํ๋ค. ์ด๋ ๋ถ๋ณ์ฑ์ ์ง์ผ์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ธฐ์กด์ state๋ฅผ ์์ ํ๋ฉด ๋ณํ๋ฅผ ์์์ฐจ๋ฆด ์ ์๋ค. ํ์ฌ ์์ฑ๋ ์ฝ๋์์ ์์ ํ์ ์ ๊ฒฝ์ฐ์๋ ๊ผญ ๋ถ๋ณ์ฑ์ ์งํค์ง ์์๋ ์ํ๊ฐ ์ ๋ฐ์ดํธ ๋ ์ ์์ ๊ฒ ๊ฐ๊ณ , ๊ฐ์ฒด ํ์ ์ ๊ฒฝ์ฐ์๋ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ง๋ ์์์ง๋ง ์ค์ ๊ฐ์ฒด์ ๊ฐ์ด ์๋ ์ฃผ์ ๊ฐ์ผ๋ก ๋น๊ตํ๋๊ฒ ์ฑ๋ฅ๋ฉด์์ ๊ด์ฐฎ์ ๊ฒ ๊ฐ๋ค.
type Reducer<State, Payload> = (state: State, action: Action<Payload>) => State;
dispatch๋ก action์ reducer์๊ฒ ๋์ง๋ค. ์ํ๋ฅผ ์ ๋ฐ์ดํธํ๊ณ , ๊ตฌ๋ ํ๊ณ ์๋ listener๋ค์๊ฒ ๋ ธํฐ๋ฅผ ์ค๋ค.
dispatch<T>(action: Action<T>) {
this.state = this.reducer(this.state, action);
this.listeners.forEach((listener) => listener());
}
Last updated