Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- postcss
- KDT 프로그래머스 데브코스 프론트엔드
- git 같은계정 다른 컴퓨터
- 폼 입력 바인딩
- SCSS import
- 프로그래머스 프론트엔드 데브코스
- 리스트 렌더링
- Vue
- 쌓임맥락
- intersection opserver
- KDT 프로그래머스
- Spacer
- flex
- nextjs사용법
- vue 이벤트 수신
- 프로그래머스 K_Digital Training
- 프로그래머스 데브코스 프론트엔드
- netlify redirect
- 이벤트 수식어
- 프로그래머스 데브코스
- SCSS forward
- SCSS use
- 리액트
- SCSS extend
- react next
- vue mixin
- vue 지역 컴포넌트
- 고양이 사진 검색기
- vuex map
- 다른컴퓨터에서 git사용
Archives
- Today
- Total
혼자 적어보는 노트
[React] Redux 초기 세팅, 구조 with Ducks 본문
처음에 너무 가볍게 접근했던 리덕스..
몇차례 호되게 당하고.. 이제야 조금씩 감을 잡기 시작하여 다시 작성을 해보기로 했다.
리덕스 초기 세팅
1. react-redux, redux설치
npm i react-redux redux
2. action 함수와 type, reducer를 관리할 파일 생성.
[modules/todo.js]
const initialState = [1, 2, 3, 4]; //state 초기값 생성
const todoReducer = (state = initialState, action) => {
return state;
};
export default todoReducer;
가끔 기초강의 보면 세개를 각각의 파일로 관리하던데
리듀서와 액션 관련 코드들을 한 파일에 모두 작성하는 Ducks패턴으로 진행했다.
폴더명은 Docks패턴의 관습적인 폴더명인 modules를 사용했다.
reducer는 export default로 내보내고 action함수는 export로 내보낸다.
초기 세팅이기때문에 액션타입과 액션 생성 함수는 생략했지만
액션 타입과 액션 생성 함수는 아래와 같이 넣는다.
// const INCREASE = 'todo/INCREASE';
// const DECREASE = 'todo/DECREASE';
// export const increase = () => ({ type: INCREASE });
// export const decrease = () => ({ type: DECREASE });
3. reducer를 관리하는 index.js파일 생성.
[modules/index.js]
import { createStore } from "redux";
import todoReducer from "./todo";
const rootReducer = todoReducer;
const store = createStore(rootReducer);
export default store;
현재는 한개의 리듀서를 사용하기 때문에 rootReducer에 todoReducer를 담아 놓았다.
* Redux DevTools 사용 시 store를 아래와 같이 변경
const store = createStore(
rootReducer,
window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
);
* 복수의 리듀서 사용시 combineReducers 사용
import { createStore } from "redux";
import { combineReducers } from "redux";
import todoReducer from "./todo";
const rootReducer = combineReducers({ todoReducer, productReducer });
const store = createStore(rootReducer);
export default store;
4. 최상위 index에 연결
[index.js]
import React from "react";
import ReactDOM from "react-dom";
import "./index.css";
import App from "./App.jsx";
import store from "./modules/index";
import { Provider } from "react-redux";
ReactDOM.render(
<React.StrictMode>
<Provider store={store}>
<App />
</Provider>
</React.StrictMode>,
document.getElementById("root")
);
store를 import하여 Provider로 감싸서 내보내준다.
5. 테스트
import React from "react";
import { useSelector } from "react-redux";
const Todos = (props) => {
const state = useSelector((state) => state);
console.log(state, "state");
return (
<div>
<h1>Todo</h1>
</div>
);
};
export default Todos;
useSelector로 state를 받아서 잘 출력되는지 테스트 한다.
'React' 카테고리의 다른 글
[React] 라이브러리 없이 캘린더 만들어 보기 (0) | 2022.01.10 |
---|---|
[React] Drag and Drop 이벤트 응용해보기 / 문제해결 (0) | 2022.01.08 |
[React] Drag and Drop 이벤트 적용해보기 (0) | 2022.01.06 |
[React] firebase / 사용자 이메일 로그인 기능 구현해보기 (0) | 2022.01.04 |
[React] state데이터 object로 관리/수정하기 (0) | 2022.01.03 |
Comments