개발자

react에서 상태관리로 redux 사용 관련 질문

2023년 04월 03일조회 147

React에서 상태 관리를 위해 Redux를 사용하고 있습니다. 아이템 리스트 페이지로 이동할 때, 아이템 리스트를 가져오는 로직을 action 생성 함수에 구현하고, 페이지 이동 시 해당 함수를 dispatch하는 방식이 적절한가요?

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 2

강동희님의 프로필 사진

아이템 리스트를 가져오는 로직이 비동기를 통해 데이터를 가져오는 경우라면, 데이터를 가져오는 부분은 redux-saga/thunk 와 같은 미들웨어를 사용하고, 데이터를 가공하거나 처리하는 로직은 리듀서에서 구현해야 할 것 같습니다. 물론 커스텀 훅 속에서 select 해온 결과를 가공해서 리턴해줄수도 있겠구요, 설계하시는 방식에 따라서 다를것 같습니다. 리덕스의 플로우에 대해서 먼저 이해하시면 더 좋은 결과물이 나올거라고 생각합니다. https://tech.osci.kr/2022/06/29/복잡하고-어려운-redux-적응기/

커리어리 AI 봇님의 프로필 사진

네, Redux를 사용하는 React 프로젝트에서 페이지 이동 시 아이템 리스트를 가져오는 로직을 action 생성 함수에 구현하고 페이지 이동 시 해당 함수를 dispatch하는 방식은 적절합니다. 이 방식을 사용하면 상태 관리가 일관되게 유지되고 컴포넌트와 데이터 로딩 로직이 분리되어 코드의 가독성과 유지 보수성이 향상됩니다. 다음과 같은 절차를 따라 구현할 수 있습니다. 1. action 타입을 정의합니다. 2. action 생성 함수를 구현합니다. 3. 비동기 작업을 수행하는 thunk 함수를 작성합니다. 4. reducer를 작성하여 상태를 업데이트합니다. 5. 컴포넌트에서 useEffect를 사용하여 페이지 이동 시 fetchItems action을 dispatch 합니다. 이렇게 구현하면 페이지 이동 시 아이템 리스트를 가져오고, 상태를 업데이트하는 과정이 Redux를 통해 관리되며, 코드의 구조가 깔끔해집니다. ✅ Chat GPT의 답변을 평가해 주세요! - 답변 내용이 올바른지, 틀린 내용은 없는지 댓글로 작성해 주세요.

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
const FETCH_ITEMS_REQUEST = 'FETCH_ITEMS_REQUEST';
const FETCH_ITEMS_SUCCESS = 'FETCH_ITEMS_SUCCESS';
const FETCH_ITEMS_FAILURE = 'FETCH_ITEMS_FAILURE';
const fetchItemsRequest = () => ({ type: FETCH_ITEMS_REQUEST });
const fetchItemsSuccess = (items) => ({ type: FETCH_ITEMS_SUCCESS, payload: items });
const fetchItemsFailure = (error) => ({ type: FETCH_ITEMS_FAILURE, payload: error });
export const fetchItems = () => async (dispatch) => {
  dispatch(fetchItemsRequest());
  try {
    const response = await api.getItems(); // api.getItems()는 아이템 리스트를 가져오는 API 호출입니다.
    dispatch(fetchItemsSuccess(response.data));
  } catch (error) {
    dispatch(fetchItemsFailure(error));
  }
};
const initialState = {
  loading: false,
  items: [],
  error: null
};

const itemsReducer = (state = initialState, action) => {
  switch (action.type) {
    case FETCH_ITEMS_REQUEST:
      return { ...state, loading: true };
    case FETCH_ITEMS_SUCCESS:
      return { ...state, loading: false, items: action.payload };
    case FETCH_ITEMS_FAILURE:
      return { ...state, loading: false, error: action.payload };
    default:
      return state;
  }
};

export default itemsReducer;
import React, { useEffect } from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { fetchItems } from '../actions/itemsActions';

const ItemsList = () => {
  const dispatch = useDispatch();
  const { items, loading, error } = useSelector((state) => state.items);

  useEffect(() => {
    dispatch(fetchItems());
  }, [dispatch]);

  // 컴포넌트 렌더링 로직
};

커리어리 AI 봇의 답변을 평가해 주세요!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!