๐จํ์๋ ์ด์ ํ๋ก์ ํธ์์ props ์ง์ฅ์ ๋ง ๋ณด์๋ค.
ํด๋น ๋ฐฉ๋ฒ์ผ๋ก ๋ฌด๋ ค 3๋จ๊ณ๋ฅผ ๋ด๋ ค๊ฐ๋ค...๐ฆ
๋ฉ๋ฆฌ ๋จ์ด์ง ์ปดํฌ๋ํธ๋ผ๋ฆฌ ์ํ๊ฐ์ ๊ตํํ ๋ ๋ณต์กํด์ง๋ ๋ฐ์ดํฐ ํ๋ฆ์ด ์ ์ญ ์คํ ์ด์ ๊ฐ์
์ ํตํด ๊ฐ๊ฒฐํ๊ฒ ๋ง๋ ๋ค. ์ฆ, ์ปดํฌ๋ํธ์ ์คํ ์ด๊ฐ 1:1 ๊ด๊ณ๋ฅผ ๋งบ๊ฒ ๋จ
๐จNotice
- ์ ๋๋ฉ์ด์ ์ ์ํ ๋ฐ์ดํฐ, ๋ฌธ์์ด ์ ๋ ฅ์ฐฝ์ ํ์ฌ ์ํ๊ฐ์ ์ปดํฌ๋ํธ์์ ๊ด๋ฆฌํ๋๊ฒ ๋ ๋์.
- ์ ์ฒด ์ํฏ๊ฐ์ ๋ฆฌ๋์ค๋ก ๊ด๋ฆฌํ๋ฉด ์๊ฐ ์ฌํ ๋ฑ์ ๊ธฐ๋ฅ์ ์ฝ๊ฒ ๊ตฌํ ๊ฐ๋ฅ but,
ํด๋น ๊ธฐ๋ฅ์ด ํ์ํ์ง ์๋ค๋ฉด, ํ๋ก๊ทธ๋จ์ ์ผ๋ถ ์ํ๋ง ๋ฆฌ๋์ค๋ฅผ ํ์ฉํด๋ ์ข์.
๐จNotice
๋ฆฌ๋์ค์ state๋ฅผ ์์ ํ๋ ์ ์ผํ ๋ฐฉ๋ฒ! => action ๊ฐ์ฒด์ ํจ๊ป dispatch๋ฅผ ํธ์ถํ๋ ๊ฒ
(aka.setState)
๐จNotice
reducer๋ preState ์ action ๊ฐ์ฒด๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ์๋ก์ด state๋ฅผ ๋ง๋๋ ์์ ํจ์
export const addCart = (item) => { // ์ก์
"์์ฑ ํจ์"
return {
type: "ADD_ITEM", // ์ก์
"๊ฐ์ฒด"
payload: item,
};
};
const dispatch = useDispatch()
- store์ ๋ด์ฅ ํจ์, store์ ์ก์ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ ํจ์
const [state, setState] = useState() // ์ฌ๊ธฐ์ state๋ store
<FooComponent setState={setState} /> // ์ฌ๊ธฐ์ FooComponent๋ ๋ด๊ฐ ์ปจํธ๋กคํ๋ ์ปดํฌ๋ํธ
state, action) => nextState // state(ํน์ store)์ action ๊ฐ์ฒด๋ฅผ ๋ฐ๊ณ ๋ค์ state ๋ฆฌํด
// cartReducers.js
export default function cartReducer(state = INITIAL_STATE, action) {
switch (action.type) {
case "ADD_ITEM":
return [...state, action.payload]; // ์คํ ์ด์ ์ด์ ์ํ์ ์๋ก์ด item์ ์ถ๊ฐ
case "DELETE_ITEM":
return [...action.payload]
default:
return state; // ํด๋น ์ฌํญ ์์ผ๋ฉด ์ด์ ์ํ๋ฅผ ๊ทธ๋๋ก ๋ฆฌํด
}
}
// index.js
import { combineReducers } from "redux";
import cartReducer from "./cartReducer";
export default combineReducers({ cartReducer });ํฌ๋ํธ
- reducer๋ ์ก์ ์ด ๋ฐ์ํ์ ๋ ์๋ก์ด ์ํ๊ฐ์ ๋ง๋๋ ํจ์
import React from "react";
import ReactDOM from "react-dom";
import Routes from "./Routes";
import { Provider } from "react-redux";
import { createStore } from "redux";
import rootReducer from "./store/reducers";
const store = createStore(rootReducer);
ReactDOM.render(
<Provider store={store}>
<Routes />
</Provider>,
document.getElementById("root")
);
- store๋ redux์ ์ํ๊ฐ์ ๊ฐ์ง๋ ๋จ์ผ ๊ฐ์ฒด์ด๋ฉฐ, ํ๋ก์ ํธ ์ด๋๋ ์ ๊ทผํ ์ ์๋ค!(provider)
const items = useSelector((store) => store.cartReducer);
// index.js
<ThemeProvider>
<Routes />
</ThemeProvider>
// app.js
const foo = styled.div`
color: ${props => props.theme.wecodeBlue}
`