redux dir : 리덕스 관련 코드를 몰아넣음
ㄴ modules dir : state의 그룹
ㄴ config dir: 리덕스 설정 관련 파일 전부
ㄴ configStore.js : 중앙 state 관리소 설정 코드
//configStore.js
import { createStore } from "redux";
import { combineReducers } from "redux";
import counter from "../modules/counter";
//app 전체에서 counter라는 reducer를 쓸 수 있음
const rootReducer = combineReducers({
counter,
});
const store = createStore(rootReducer);
export default store;
//index.js
import { Provider } from "react-redux";
import store from "./redux/config/configStore";
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
<Provider store={store}>
<App />
</Provider>,
);
Store을 구성하는 것 = modules의 initial state + Reducers(state제어)
action.type은 유지보수를 위해 상수로 지정하기
// ./modules/counter.js
export const INCREASE = "INCREASE";
export const DECREASE = "DECREASE";
//App.js
import { INCREASE, DECREASE } from "./redux/modules/counter";
// ...
return (
<div className="App">
<button onClick={() => dispatch({ type: INCREASE })}>z+</button>
<button onClick={() => dispatch({ type: DECREASE })}>-</button>
현재 카운트: {data.counter.number}
</div>
);
또는 action 객체를 return 하는 함수를 만들어서 export 해줘도 된다.
// ./modules/counter.js
export const increase = () => {
return {
type: "INCREASE",
};
};
export const decrease = () => {
return {
type: "DECREASE",
};
};
'Computer Programming > React' 카테고리의 다른 글
Storybook 스토리북이란? (0) | 2023.06.29 |
---|---|
리덕스 프로젝트 구조 - Dumb & Smart (Presentational 컴포넌트와 Container 컴포넌트의 분리) (0) | 2023.06.27 |
HTML <a>태그의 target 사용 시 주의점 (rel = "noreferrer") (0) | 2023.06.22 |
리액트의 렌더링 순서와 렌더링 최적화하는 법 (memoization을 통해 불필요한 리렌더링 해결하기!) (2) | 2023.05.20 |
React 앱에서 Redux 사용예시 (Counter App) (0) | 2023.05.18 |