electron.js와 react를 통합하여 메신저앱을 만드는 중,
react내에서 수시로 불러야 할 api들은 redux로 관리하기로 하여 초기 세팅 작업에 들어갔습니다.
아래는 제가 적용했던 redux 초기 세팅방법에 대한 내용입니다.
리덕스 초기 세팅 및 폴더구조 생성
1. 리덕스 설치
아래 내용으로 redux를 설치합니다.
npm install redux react-redux redux-thunk
- redux: Redux 라이브러리 본체입니다.
- react-redux: React와 Redux를 연결해주는 라이브러리입니다.
- redux-thunk: 비동기 로직을 처리하기 위한 미들웨어입니다.
2. redux 폴더구조
폴더구조는 아래처럼 만들기로 하였습니다.
src/
└── redux/
├── actions/
│ ├── agentActions.js
│ ├── chatActions.js
│ └── ... (기타 액션 파일들)
├── reducers/
│ ├── agentReducer.js
│ ├── chatReducer.js
│ ├── rootReducer.js (모든 리듀서를 결합)
│ └── ... (기타 리듀서 파일들)
├── store/
│ └── index.js (스토어를 생성하고 필요한 미들웨어를 적용)
└── types/
└── actionTypes.js (모든 액션 타입을 정의)
3. 액션 정의
상담사 정보를 요청, 성공, 실패에 대한 액션 타입을 정의합니다.
// actions/agentActions.js
export const FETCH_AGENTS_REQUEST = 'FETCH_AGENTS_REQUEST';
export const FETCH_AGENTS_SUCCESS = 'FETCH_AGENTS_SUCCESS';
export const FETCH_AGENTS_FAILURE = 'FETCH_AGENTS_FAILURE';
4. 액션 생성자 작성
액션 생성자 함수를 작성합니다.
// actions/agentActions.js
import { FETCH_AGENTS_REQUEST, FETCH_AGENTS_SUCCESS, FETCH_AGENTS_FAILURE } from './agentActions';
export const fetchAgentsRequest = () => ({
type: FETCH_AGENTS_REQUEST,
});
export const fetchAgentsSuccess = agents => ({
type: FETCH_AGENTS_SUCCESS,
payload: agents,
});
export const fetchAgentsFailure = error => ({
type: FETCH_AGENTS_FAILURE,
payload: error,
});
5. 리듀서 작성
액션에 따라 상태를 변경하는 리듀서를 작성합니다.
// reducers/agentReducer.js
import { FETCH_AGENTS_REQUEST, FETCH_AGENTS_SUCCESS, FETCH_AGENTS_FAILURE } from '../actions/agentActions';
const initialState = {
loading: false,
agents: [],
error: '',
};
const agentReducer = (state = initialState, action) => {
switch (action.type) {
case FETCH_AGENTS_REQUEST:
return {
...state,
loading: true,
};
case FETCH_AGENTS_SUCCESS:
return {
loading: false,
agents: action.payload,
error: '',
};
case FETCH_AGENTS_FAILURE:
return {
loading: false,
agents: [],
error: action.payload,
};
default:
return state;
}
};
export default agentReducer;
6. 스토어 생성
Redux 스토어를 생성하고 리듀서를 연결합니다.
// store.js
import { createStore, applyMiddleware, combineReducers } from 'redux';
import thunk from 'redux-thunk';
import agentReducer from './reducers/agentReducer';
const rootReducer = combineReducers({
agent: agentReducer,
});
const store = createStore(rootReducer, applyMiddleware(thunk));
export default store;
리덕스 초기 세팅에 앞서 액션, 리듀서, 스토어의 역할에 대해 잘 알고 있어야 할 것 같습니다.
감사합니다.
'개발 이야기 > frontend' 카테고리의 다른 글
리액트에서 커스텀 훅을 사용해야 하는 이유 (0) | 2024.04.19 |
---|---|
React 에서 index.html에 스크립트 태그가 없는 이유 (0) | 2024.04.18 |
외부 컴포넌트 스타일을 해당 페이지에서 적용하기 위해 className을 넘겨주기 (0) | 2023.11.07 |
react에서 css module로 다른 클래스와의 스타일이 충돌되는 것 방지하기 (0) | 2023.11.06 |
채팅창 우측 하단부터 메세지 나오게 하기 - flex-direction reverse 사용 (0) | 2023.10.31 |
댓글