해결된 질문
작성
·
63
0
fetchTravelproducts에서 클릭으로 상세 페이지로 들어가면
fetchTravelproduct 의 data 값을 보여주는데
API 요청에서 data 값을 확인하면 seller 값이 들어있는데 data.fetchTravelproduct.seller를 콘솔에 찍으면 null 이 뜹니다. (다른 데이터는 정상적으로 불러옵니다.)
fetchTravelproducts에서는 판매자 이름이 잘 출력이 되는데 상세페이지에 들어가면 해당 fetchTravelproduct API 요청으로 가져와도 판매자 데이터가 없는 상태로 뜨는데 문제가 뭘까요?
여기서 상세페이지에서 새로고침을 하면 정상적으로 판매자가 보여집니다.
fetchTravelproducts에서 캐싱하는 과정에 문제가 있는 걸 까요?
// 상세 페이지
import { Query } from "@/entities/api/graphql";
import { gql, useQuery } from "@apollo/client";
export const TRAVEL_PRODUCT = gql`
query fetchTravelproduct($travelproductId: ID!) {
fetchTravelproduct(travelproductId: $travelproductId) {
_id
name
remarks
contents
price
tags
images
pickedCount
travelproductAddress {
zipcode
address
addressDetail
lat
lng
}
seller {
_id
name
picture
}
createdAt
}
}
`;
export const useFetchTravelProduct = ({ travelId }: { travelId: string }) => {
const result = useQuery<Pick<Query, "fetchTravelproduct">>(TRAVEL_PRODUCT, {
variables: { travelproductId: travelId },
});
return result;
};
// 목록 페이지
import { Query } from "@/entities/api/graphql";
import { gql, useQuery } from "@apollo/client";
const TRAVEL_PRODUCTS = gql`
query fetchTravelproducts($isSoldout: Boolean, $search: String, $page: Int) {
fetchTravelproducts(isSoldout: $isSoldout, search: $search, page: $page) {
_id
name
remarks
contents
price
tags
images
pickedCount
travelproductAddress {
zipcode
address
addressDetail
lat
lng
}
buyer {
_id
name
picture
}
seller {
_id
name
picture
}
createdAt
}
}
`;
interface UseFetchTravelProductsArgs {
isSoldout: boolean;
search: string | null;
page: number;
}
export const useFetchTravelProducts = ({
isSoldout,
search,
page,
}: UseFetchTravelProductsArgs) => {
const result = useQuery<Pick<Query, "fetchTravelproducts">>(TRAVEL_PRODUCTS, {
variables: {
isSoldout,
search,
page,
},
});
return result;
};
답변 2
0
안녕하세요! 초무님!
페이지 이동시에는 잘 안나오고, 새로고침시 제대로 불러와진다고 하신걸 보면, 두 요청간에 어떠한 차이가 있는지 먼저 확인해 볼 필요가 있겠어요!
개발자도구에서 네트워크탭을 열어놓고, graphql 요청시 들어가는 variables의 차이와, 응답으로 받는 response 부분의 차이, 또는 둘 간의 header 부분에 토큰 등의 차이를 비교해 보세요!
0
안녕하세요, 인프런 AI 인턴입니다.
초무님, 캐싱 문제와 관련하여 몇 가지 확인해볼 수 있는 부분을 안내드리겠습니다:
Apollo Client의 Cache 설정 확인:
Schema의 정확성:
데이터 로딩 과정 확인:
React 상태 관리 확인:
참고: 상세 페이지에서 수동으로 데이터를 다시 fetch할 수도 있습니다. 예를 들어, useEffect를 사용하여 해당 페이지가 로드되었을 때 데이터를 다시 가져오도록 할 수 있습니다.
위 방법들이 도움이 되기를 바랍니다. 추가적인 설정이나 코드 로직에 관한 질문이 있으시면 언제든지 질문해 주세요.
캐싱과 관련된 더 많은 정보는 공식 문서를 참조하시길 추천드립니다:
- Apollo Client Caching
그리고 GraphQL API 사용 시 실제 필드명이 스키마와 일치하는지, 객체의 구조가 올바른지 확인하는 것도 중요합니다. 문제 해결에 도움이 되길 바랍니다.