어드민 프로젝트를 하며 새롭게 사용하는 라이브러리와 사용 방법에 대해서 구글링해보며 사용했지만,그것에 대한 이론적 근거에 대해 공부는 부족했던 것 같습니다.
이번 포스팅은 상태관리와 Redux, RTK query에 대해 공부한 내용을 기록해보려고 합니다.
createApi
를 통해 관련 코드들을 모두 한 곳에 작성할 수 있음. // base URL과 엔드포인트들로 서비스 정의
export const hashTagApi = createApi({
reducerPath: 'hashtag', // 스토어의 reducer로 지정할 Path의 이름
tagTypes: ['HashTag'], // 자동으로 데이터가 패치되게 구별할 타입
baseQuery: fetchBaseQuery({
baseUrl: baseUrl + '/hashtag',
prepareHeaders: (headers) => {
const token = sessionStorage.getItem('accessToken');
if (token) headers.set('Authorization', `Bearer ${token}`);
return headers;
},
}),
endpoints: (builder) => ({
getHashtagList: builder.query({ // HTTP GET의 경우
query: (page) => `/?size=15&page=${page - 1}`,
providesTags: ['HashTag'], // 받아온 데이터에 태그 부여
transformResponse: (response: HashtagList): GetHastag => {
const { content, totalPages, totalElements } = response;
const tableHeaderData = content.map((tableData) => {
return {
id: tableData.id,
tag: tableData.tag,
};
});
return { content: tableHeaderData, totalPages, totalElements };
},
}),
addHashtag: builder.mutation({ // POST, PATCH, DELETE 등의 경우
query: (addHashTagForm) => ({
url: `/`,
method: 'POST',
body: addHashTagForm,
}),
invalidatesTags: ['HashTag'], // 해당 태그를 가진 캐시 데이터 제거(타입 체크도 자동으로 됨)
}),
)}
// 정의된 엔드포인트에서 자동으로 생성된 훅을 함수형 컴포넌트에서 사용하기 위해 export
export const {useGetHashtagListQuery} = hashTagApi;
const store = configureStore({
reducer: {
[hashTagApi.reducerPath]: hashTagApi.reducer,
},
middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(hashTagApi.middleware),
});
export default store;
const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement);
root.render(
<Provider store={store}>
<App />
</Provider>
);
const { data: hashtagList } = useGetHashtagListQuery(page);
data
, status
, error
로 알맞는 UI를 렌더링할 수 있습니다.
또한 useQuery
는 유틸리티 불리언 값인 isLoading
, isFetching
, isSuccess
, isError
로 가장 최근의 요청에 대한 값을 제공합니다.
https://redux-toolkit.js.org/
https://junsangyu.gitbook.io/rtk-query/