
title: 리액트 리덕스 각 컴포넌트에 고유한 오류/성공 메시지를 처리하는 올바른 방법
기존 오류/성공 메시지 전달의 문제점
리액트 리덕스에서 오류 및 성공 메시지를 처리할 때, 튜토리얼에서 권장하는 표준 접근 방식은 일반적인 문제를 야기할 수 있습니다. 이 문제는 같은 리듀서를 구독하는 여러 컴포넌트 간에 메시지가 공유되는 경우에 발생합니다. 이 문제를 일러스트레이션하기 위해, 할 일 애플리케이션의 맥락에서 이 문제를 자세히 살펴보겠습니다.
시나리오: 할 일 애플리케이션에서 추가, 편집 및 삭제 작업에 대한 별도의 UI 페이지
추가, 편집 및 삭제 작업을 위한 별도의 페이지가 있는 할 일 애플리케이션을 상상해보세요. 모든 작업은 동일한 할 일 리듀서에 의해 관리되며, 이 작업을 트리거하는 컴포넌트는 mapStateToProps를 통해 이 리듀서를 구독하여 변경 사항과 성공/오류 메시지를 받습니다.
function mapStateToProps(state) {
return {
success: state.todo.success,
error: state.todo.error,
};
}
문제는 추가 작업, 편집 작업 및 삭제 작업에 대한 오류/성공 메시지를 구분할 수 있는 방법이 없다는 점입니다. 따라서 할 일을 추가하는 동안 오류가 발생하면 해당 오류는 편집 및 삭제할 일 옆에도 표시됩니다. 이 혼동은 사용자 경험을 저하시킬 수 있으며, 오류 메시지가 사용자가 수행한 작업과 관련이 없을 수 있습니다.
고유한 오류/성공 메시지를 처리하기 위한 해결책
이 문제를 해결하고 각 작업에 대해 고유한 오류/성공 메시지를 제공하기 위해 두 가지 가능한 해결책을 제안합니다:
1. 작업별 메시지에 대한 전역 상태 리듀서
이 해결책에서는 각 특정 작업에 대한 오류/성공을 처리하는 전역 상태 리듀서를 만들 수 있습니다. 각 작업은 상태 리듀서 내에 자체적인 작은 하위 리듀서를 가집니다. 다음은 이를 구현하는 방법입니다:
const status = combineReducers({
add_todo, // add_todo에 대한 오류/성공을 처리합니다
edit_todo, // edit_todo에 대한 오류/성공을 처리합니다
delete_todo, // delete_todo에 대한 오류/성공을 처리합니다
...
update_bio, // update_bio에 대한 오류/성공을 처리합니다
etc...
});
이렇게 오류/성공 메시지를 구성함으로써, 컴포넌트에서 쉽게 접근하여 해당 메시지를 렌더링할 수 있습니다:
function mapStateToProps(state) {
return {
error: state.status.add_todo.error,
success: state.status.add_todo.success
};
}
{!!this.props.error && <p>{this.props.error}</p>}
{!!this.props.success && <p>{this.props.success}</p>}
이 접근 방식은 오류/성공 메시지가 각 작업에 특정하게 표시되므로 더 나은 사용자 경험을 제공합니다. 그러나 큰 애플리케이션에는 각 작업에 대한 하위 리듀서를 생성해야 하므로 이는 이상적이지 않을 수 있습니다.
2. 작업별 리듀서 내에서 고유한 오류/성공 키
이 대체 해결책에서는 할 일 리듀서를 수정하여 각 작업별로 고유한 오류/성공 키를 가지도록 할 수 있습니다:
ADD_TODO_FAILED:
return {...state, error_add_todo: action.error }
EDIT_TODO_FAILED:
return {...state, error_edit_todo: action.error }
DELETE_TODO_FAILED:
return {...state, error_delete_todo: action.error }
리듀서 내에서 오류/성공 키를 지역적으로 고유하게 유지함으로써, 컴포넌트에서 쉽게 접근할 수 있습니다:
function mapStateToProps(state) {
return {
error: state.todo.error_add_todo,
success: state.todo.success_add_todo
};
}
{!!this.props.error && <p>{this.props.error}</p>}
{!!this.props.success && <p>{this.props.success}</p>}
이 해결책을 통해 리듀서가 관리하는 각 작업에 대한 명확한 오류/성공 메시지가 확보됩니다. 그러나 리듀서 내에서 고유한 키를 주의해서 관리해야 하며, mapStateToProps 함수 내에서 특정 키에 대한 참조가 더 길어질 수 있습니다.
최적의 접근 방식 선택하기
제안된 두 가지 해결책은 각각 장단점이 있으며, 선택은 애플리케이션의 특정 요구 사항에 따릅니다. 전역 상태 리듀서는 오류/성공 메시지를 명확하게 분리하지만 각 작업에 대한 하위 리듀서를 생성해야 합니다. 반면, 지역적으로 고유한 키 해결책은 리듀서 구조를 단순화하지만 키를 주의해서 관리해야 합니다.
더 작은 애플리케이션의 경우, 지역적으로 고유한 키 접근 방식이 충분할 수 있습니다. 하지만 더 크고 복잡한 애플리케이션의 경우, 전역 상태 리듀서 접근 방식이 더 좋은 조직과 확장성을 제공합니다.
오류/성공 메시지를 처리할 때, 전반적인 사용자 경험을 고려하고 사용자가 취한 특정 작업과 관련된 메시지임을 보장하는 것이 중요합니다. 선호도와 애플리케이션의 요구 사항에 따라 가장 적합한 해결책을 선택하세요.
이 글이 리액트 리덕스 애플리케이션에서 오류/성공 메시지를 처리하는 데 도움이 되기를 바랍니다. 피드백, 제안 또는 추가로 알아야 할 사항이 있다면 하단의 댓글에서 자유롭게 공유해 주세요.
좋은 코딩 되세요!