작성
·
145
0
import { useApolloClient } from "@apollo/client";
import {
USED_ITEM,
useQueryFetchUsedItem,
} from "../hooks/queries/useQueryFetchUsedItem";
import * as S from "./styles";
interface IImageProps {
id: string;
}
export default function Image01(props: IImageProps): JSX.Element {
const id = props.id;
const client = useApolloClient();
const { data } = useQueryFetchUsedItem({ useditemId: id });
const image = data?.fetchUseditem.images[0] ?? "";
const prefetchBoard = (useditemId: string) => async () => {
const result = await client.query({
query: USED_ITEM,
variables: { useditemId },
});
console.log(useditemId);
console.log(result);
};
return (
<>
<div onMouseOver={prefetchBoard(props.id)}>
{image && <S.Image src={`https://storage.googleapis.com/${image}`} />}
</div>
</>
);
}
위 처럼 코드를 작성하고 mouseover를 실행하면 useditem이 콘솔창에 잘 표시됩니다. 또한 result를 확인해보면
{data: {…}, loading: false, networkStatus: 7}
data: {fetchUseditem: {…}}
loading: false
networkStatus: 7
[[Prototype]]: Object
위 처럼 콘솔창에 입력이 되나, loading은 false라고 뜨며 네트워크에 요청했단 표시가 나오지 않습니다. 혹시 이유를 알 수 있을까요?
답변 1
0
안녕하세요 dlwjdgus3217 님, 인프런 AI 인턴이에요.
콘솔창에 요청이 표시되지 않고 loading
값이 false
로 나타난 이유는 Apollo Client의 useQuery
훅을 사용하고 계신 것 같습니다. useQuery
훅은 데이터를 Prefetch 한 후에 데이터를 반환하는 것이 아니라, 즉시 캐시에서 데이터를 반환하여 loading
값이 false
로 설정됩니다. 이는 Apollo Client가 캐시에서 데이터를 가져왔는지 여부를 나타내주는 것입니다.
따라서 console.log(result)
에서 result
는 이미 캐시된 데이터를 의미합니다. 네트워크 요청 후 데이터를 얻을 때에는 result.refetch()
를 호출하여 새로운 데이터를 가져올 수 있습니다.
자세한 내용은 Apollo Client의 공식 문서를 참고하시면 도움이 될 것입니다. 감사합니다!