
서버 의존성이 높이 때문에, 서버가 단절되었을 때 화면에 해당 내용을 전달하지 못하는 점이 있으며, 비동기통신을 통해서 데이터를 받아온 다는 점에서 지연되는 시간 만큼 UI 생성이 늦어진다는 단점이 있다.
결론적으로, 저희 MUSE-O는 아트그램 데이터와 전시데이터를 활용함에 있어서 각각의 개별 페이지 뿐 아니라 해당 데이터를 메인페이지와 마이페이지에도 연동하여 사용하고, 각각의 부분에서 좋아요를 비롯한 찜하기 기능을 동시적으로 활용한다는 점에서, 데이터의 유동성을 제어할 필요가 요구되었고, 이러한 부분을 관리하고자 글로벌 상태 관리가 아니라, ServerState를 통하여 즉시적으로 데이터가 유지 및 관리되도록 방향을 잡게 되었습니다.
const todosSlice = createSlice({
name:"todosT",
initialState :
{
todos: [],
isLoading: false,
isError: false,
error: null
},
reducers:{},
extraReducers:{
// #01-01 axios.GET // isLoading
[__getTodos.pending] : (state, actions)=> {
state.isLoading = true;
state.isError = false;
},
// #01-02 axios.GET // fulfilled
[__getTodos.fulfilled] : (state, actions) =>{
state.isLoading = false;
state.isError = false;
state.todos = actions.payload
},
// #01-03 axios.GET // isError
[__getTodos.rejected] : (state, actions)=> {
state.isLoading = false;
state.isError = true
}
},
})
첫째, 코드의 간결성: Redux에 비교할 때, React Query는 데이터 관리와 관련된 로직을 간결하게 유지할 수 있기 때문에, 코드의 양이 줄어듭니다.
둘째, 주기적인 데이터 업데이트 및 오류처리의 간편성: React-Query는 서버로의 요청 중에 발생하는 오류를 처리하고 재시도 로직을 쉽게 구현할 수 있는 기능을 제공한다. 예를 들어, 네트워크 오류, 인증 오류, 서버 에러 등의 경우에 대응하여 오류 처리를 할 수 있고, 재시도 로직을 통해 오류가 발생했을 때 자동으로 요청을 다시 시도할 수 있으며, 주기적인 데어터 업데이트가 이뤄진다는 점이 장점 가운데 하나이다,?(기본설정으로 최소 5분 간격으로 데이터가 백그라운드에서 자동으로 업데이트)
onSuccess: ({artgramId, commentParent}) => {
queryClient.invalidateQueries(keys.GET_ARTGRAM);
console.log("성공시의 메시지");
},
onError: e => {
console.log("실패시의 메시지", e.message);
}
// 현재 프로젝트에서 사용 중인 config
- onSuccess, onError, onSettled: 성공/실패/완료 시 실행되는 함수
- retry: query 동작 실패 시, 자동으로 retry할지 결정하는 옵션
- retryDelay: retry 시간을 ms 단위로 제어할 수 있는 옵션
- refetchOnWindowFocus: 다른 프로그램으로 마우스 커서를 다녀왔을 때 자동으로 데이터가 패칭되는 설정
// 현재 프로젝트에서 사용하지는 않지만, 활용할 수 있는 config 목록
- cacheTime: 메모리에 얼마만큼 있을 건지 설정
- staleTime: 초기설정 5분으로 설정된 데이터 자동 업데이트로 시간을 유동적으로 늘리거나 줄일 수는 옵션
- enabled: 동기적으로 실행할지 유무
- suspense: 서스펜스를 사용할지 유무
- select: 성공 시 가져온 data를 가공해주는 함수
- keepPreviousData: 새롭게 fetching 시 이전 데이터 유지 여부
- refetchInterval: 주기적으로 refetch할지 결정하는 옵션
셋째, 다양한 데이터 패칭을 지원 : useQuery(), useMutation(), useInfiniteQuery()
넷째, 데이터 캐싱
결론적으로, React Query는 직관적이며 유동적인 ServerState를 기반으로 한데이터 관리를 위한 상태 관리를 제공하므로 Redux와 같은 글로벌 상태 관리 라이브러리를 사용하지 않더라도 데이터를 관리 수정할 수 있다.