React 프로젝트: 인증이 있는 게시물의 해시태그 — 파트 #3
React Query의 기본 사항 및 시작 방법에 대해 전혀 모르는 경우 link을 참조할 수 있습니다.
부품 시리즈에 대한 빠른 링크:
1 부 -
2 부 -
파트 #3 - Redux thunk 대신 원격 데이터 가져오기를 위한 React Query(이 게시물)
파트 #4 -
파트 #5 - styled-component의 고급 사용에 대한 기본 사항
어떤 단계에서든 막히면 Github repo을 참조하십시오.
완료된 프로젝트를 찾으려면 Demo link
자, 먼저 먼저. Redux 대신 React Query가 필요한 이유와 Redux의 문제점은 무엇입니까?
많은 프로젝트에서 데이터 가져오기를 처리하기 위해 Redux를 사용하고 있지만 React JS로 동일한 작업을 수행하는 더 좋은 방법이 있어야 한다고 항상 믿었습니다.
가져오기 작업을 할 때마다 개발자는 다음을 생성해야 합니다.
이 모든 코드를 작성하려면 간단한 API 호출의 경우에도 많은 시간이 걸립니다. 또한 큰 JS 번들로 끝나는 것이 어렵지 않습니다.
Redux 스토어 개요
Redux가 수행하는 모든 가져오기 작업은 Redux 스토어에 로딩 및 응답 상태를 저장해야 합니다. 그러나 대부분의 경우 해당 작업을 수행하는 구성 요소는 다른 구성 요소와 데이터를 공유할 필요가 없습니다. 결과적으로 Redux Store에 저장할 필요가 없습니다.
일반적인 Redux Flow를 검토해 보겠습니다.
단순한 가져오기를 위한 긴 과정이죠?
Redux를 포함하지 않고 높은 수준의 관점에서 모든 것을 다시 생각하기 위해 한 걸음 뒤로 물러나고 싶습니다. 기본 아이디어는 다음과 같습니다.
React Hooks 덕분에 가져오기 작업을 사용자 지정 및 재사용 가능한 useFetch 후크로 추상화할 수 있습니다.
import axios from "axios";
import toast from "react-hot-toast";
import ErrorHandleResponses from "../../api-repositories/error-handler";
const REACT_APP_DUMMY_API_ENDPOINT = "https://dummyapi.io/data/api/";
axios.defaults.headers["app-id"] = "lTE5abbDxdjGplutvTuc";
export const getAuthors = async () => {
try {
const url = `${REACT_APP_DUMMY_API_ENDPOINT}user?limit=30`;
const { data } = await axios.get(url);
return data || [];
} catch (err) {
const errorCode = ErrorHandleResponses(err.response);
if (errorCode.error) {
toast.error(`${errorCode.error} Http Error code`);
}
return errorCode;
}
};
export const getAuthorPosts = async (userId) => {
const { data } = await axios.get(
`${REACT_APP_DUMMY_API_ENDPOINT}user/${userId}/post?limit=10`
);
return data;
};
export const getAuthorDetail = async (userId) => {
const { data } = await axios.get(
`${REACT_APP_DUMMY_API_ENDPOINT}user/${userId}/`
);
return data;
};
이 접근 방식을 사용하면 Redux에서 가져오기 작업에 대한 정보를 저장할 필요가 없습니다. 공유할 필요가 있는 경우 어쨌든 최종 결과(또는 그 일부)를 저장할 수 있습니다.
import React, { useEffect, lazy } from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { useAuthors } from './authors-hooks';
import { authorSelector, authorsReceived } from './author-slice';
const AuthorListing = () => {
const { authors, filters: authorFilter } = useSelector(authorSelector);
const dispatch = useDispatch();
const { data, isFetching } = useAuthors();
const renderStatus = data && data.data;
useEffect(() => {
if (renderStatus) {
dispatch(authorsReceived(data.data));
}
}, [renderStatus]);
};
AuthorListing.displayName = 'AuthorsListing';
export default AuthorListing;
이 솔루션은 더 간단하지만 분명히 충분하지 않습니다. 우려 사항의 분리가 없으며 많은 코드 중복, 구성 요소 내의 장황한 논리 등이 있습니다.
Hooks 및 React Query의 "마법"덕분에 간단하고 깔끔합니다.
React Query makes fetching, caching, synchronizing, and updating the server state in your React applications a breeze.
팁 & 트릭
구성 요소 내에서 useQuery를 사용하지 마십시오. 대신 사용자 지정 후크로 래핑합니다.
계속하려면
Reference
이 문제에 관하여(React 프로젝트: 인증이 있는 게시물의 해시태그 — 파트 #3), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/selvaece25/react-project-hashtags-for-posts-with-auth-part-3-10ch텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)