Redux๋ฅผ ํตํ ์ ์ญ ์ํ ๊ด๋ฆฌ์ ํ์์ฑ, ๊ธฐ๋ณธ ๊ฐ๋ , ๊ทธ๋ฆฌ๊ณ ์ค์ ๊ตฌํ ๋ฐฉ๋ฒ๊น์ง ํ์ตํ์ต๋๋ค.
Local State์ ํ๊ณ
Global State์ ์ฅ์
// Store ์ค์
import { createStore } from 'redux';
import { Provider } from 'react-redux';
const store = createStore(rootReducer);
// Provider๋ก ์ฑ ๊ฐ์ธ๊ธฐ
<Provider store={store}>
<App />
</Provider>
// ์ปดํฌ๋ํธ์์ ์ํ ์ฌ์ฉ
const number = useSelector(state => state.counter.number);
const dispatch = useDispatch();
// Action Types
const ADD_NUMBER = "ADD_NUMBER";
const MINUS_NUMBER = "MINUS_NUMBER";
// Action Creators
export const addNumber = (payload) => ({
type: ADD_NUMBER,
payload,
});
// Reducer
const counter = (state = initialState, action) => {
switch (action.type) {
case ADD_NUMBER:
return {
number: state.number + action.payload,
};
default:
return state;
}
};
// 1. ํจํค์ง ์ค์น
// npm install redux react-redux
// 2. ์คํ ์ด ์์ฑ
// src/redux/config/configStore.js
const store = createStore(rootReducer);
// 3. Provider ์ค์
// index.js
<Provider store={store}>
<App />
</Provider>
๋ชจ๋ ๊ตฌ์กฐ
// Action Types
// Action Creators
// Initial State
// Reducer
// export default reducer
์ฅ์
// Action Creator with payload
export const addNumber = (payload) => ({
type: ADD_NUMBER,
payload,
});
// ์ปดํฌ๋ํธ์์ ์ฌ์ฉ
const onClickAddNumberHandler = () => {
dispatch(addNumber(5));
};
์ํ ๊ด๋ฆฌ ์ ๋ต
์ฑ๋ฅ ์ต์ ํ
ํ์ ๊ด์
Redux๋ฅผ ๋ฐฐ์ฐ๊ณ ๋๋ "์, ์ด๋์ ๋ค๋ค Redux๋ฅผ ์ฐ๋๊ตฌ๋!" ํ๋ ์๊ฐ์ด ํ ๋ค์์ต๋๋ค.
Props Drilling ์์ด ๊น๋ํ๊ฒ ์ํ ๊ด๋ฆฌํ ์ ์๋ค๋... ์ต๊ณ ! ๐