๋ฆฌ๋์ค ๋ ์ํ(state) ๋ฐ์ดํฐ๋ฅผ ์ ์ญ์ผ๋ก ๊ด๋ฆฌํด์ฃผ๊ธฐ ์ํด ๋์จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ค ๋ฆฌ์กํธ ํ์์ ๋์จ๊ฒ ์๋ ๋ฐ๋๋ผ์์๋ ์ ์ฉ์ด ๊ฐ๋ฅํ๋ค.
import { createStore } from 'redux'; // npm i redux -> import
const reducer = (state = 0) => {
// ๋ฐ์ดํฐ ์ํ๊ฐ์ ๋ฐ๊พธ๊ณ modify ํ๋๊ฑธ ์ฑ
์ ์ ธ์ฃผ๋ ํจ์
// ์ํ๋ ๋์ ์ฝ๋
return state;
};
const store = createStore(reducer /*์ฝ๋ฐฑํจ์*/); // createStore ํจ์๋ก state๋ฐ์ดํฐ ์ ์ฅ ๊ณต๊ฐ์ ๋ง๋ค์ด์ค๋ค.
// console.log(store.getState()) ํตํด์ reducer ๋ฆฌํด ๊ฐ์ ๋ณผ์๊ฐ ์๋ค.
const reducer = ((state = 0), action); //๋ง์ฝ state ๊ฐ์ด undefined ์ด๋ฉด 0์ผ๋ก ์ด๊ธฐํ
action: redux ์์ ํจ์๋ฅผ(reducer) ๋ถ๋ฅผ๋ ์ฐ๋ ๋๋ฒ์งธ
ํ๋ผ๋ฏธํฐ์ด๋ค
action ์ ๊ฐ์ฒด๋ก ์ธ์
์):{type:"somthing" ๋ฑ๋ฑ}
๊ฐ์ฒด๋ก ๋ฐ์ ๋ค์ธ๋ค.
ํจ์์ ์ํตํ ์ ์๋ ํจ์ dispatch()
๋ฅผ ์ฌ์ฉํ์ฌ ์ํตํ ์ ์๋ค.
subscribe()
ํจ์๋ store ์์ ์๋ ๋ณํ๋ฅผ ์๊ฒ ํด์ฃผ๋ ํจ์์ด๋ค.
์) ๋ํ๊ธฐ์ ๋นผ๊ธฐ๋ฅผ ํ๋ ๊ธฐ๋ฅ์ ๋ง๋ค์ด ๋ณผ๊บผ๋ค.
import { createStore } from 'redux';
const add = document.getElementById('add');
const minus = document.getElementById('minus');
const number = document.querySelector('span');
number.innerText = 0;
const countModifier = (count = 0, action) => {
if (action.type === 'ADD') {
//action {type:"ADD"} ์ผ๋ ์คํํ๋ ์ฝ๋
return count + 1;
} else if (action.type === 'MINUS') {
//action {type:"MINUS"} ์ผ๋ ์คํํ๋ ์ฝ๋
return count - 1;
} else {
return count;
}
};
const countStore = createStore(countModifier); // ์ ์ฅ์๋ฅผ ์ ์ธ ๋ฐ countModifier์ฝ๋ฐฑํจ์ ํ ๋น.
const onChange = () => {
number.innerText = countStore.getState(); //store ์ ์๋ ์ํ๊ฐ์ถ๋ ฅ
};
countStore.subscribe(onChange); // store ์์ ๊ฐ์ด ๋ณํ ํ ๋๋ง๋ค onChange ํจ์ ์คํ
const handleAdd = () => {
countStore.dispatch({ type: 'ADD' }); // ์ํต ํจ์ dispatch ์ฌ์ฉํด์ ์ํตํ๊ธฐ.
};
const handleMinus = () => {
countStore.dispatch({ type: 'MINUS' }); // ์ํต ํจ์ dispatch ์ฌ์ฉํด์ ์ํตํ๊ธฐ.
};
add.addEventListener('click', handleAdd);
minus.addEventListener('click', handleMinus);
reducer ๋ฅผ ํธ์ถํ ๋ ๋ฆฌํดํ๋ ๊ฐ์ ์ ๋ mutate ํ๋ฉด ์๋๋ค. mutate ํ๋ ๋์ ์ ์๋ก์ด Object ๋ฅผ ์์ฑํด์ ๋ฆฌํดํด์ผํ๋ค.
** ์ํ๊ฐ์ ๋ฐ๊พธ๋ ๋ฐฉ๋ฒ์ action ์ด ์ ์ผํ๋ค ๋ฐ์์ ์ํ๊ฐ์ ๋ฐ๊ฟ ์ ์๋ค.
countStore.getState() +=1 // Bad!!!
mutation:
let friends = ['bob']; // friends ๋ผ๋ ๋ฐฐ์ด ์ ์ธ
friends.push('ellie'); // ์ด๋ฐ๋ฐฉ์์ผ๋ก ๋ฐฐ์ด์ ๋ณํ ์ํค๋๊ฒ์ด mutation ์ด๋ค.
์๋ก์ด Object ๋ก ๋ง๋๋ ๋ฐฉ๋ฒ:
let friends = ['bob'];
friends = [...friends, 'ellie']; //์ด๋ฐ์์ผ๋ก ์๋ก์ด object ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
์ฐธ๊ณ ์๋ฃ https://redux.js.org/basics/reducers