예시코드
const queryKey = `getRepairDetailData${id}`;
const getRepairDetail = useAPI("get", URL, option); //custom hook
const { data } = useQuery(queryKey, () => getRepairDetail, {
cacheTime: 1000 * 300,
staleTime: 1000 * 300,
select: (data) => {
return data.data.message;
},
onError: (error: Error) => {
console.log(error);
},
enabled: false,
});
enabled: !!변수
이런식으로 많이 씀나의 경우 페이지네이션을 했을 때 axios를 보내야하는데 url이 바껴도 애가 말을 듣지 않았다.
해결방법
refatch
사용
const { data, refetch } = useQuery(queryKey, () => getReserveData, {
cacheTime: 1000 * 300,
staleTime: 1000 * 300,
refetchOnWindowFocus: false,
select: (data) => {
console.log(data);
return data.data.message;
},
onError: (error: Error) => {
console.log(error);
},
suspense: true,
});
useEffect(() => {
refetch();
}, [page]);
const submit = () => {
const formData = new FormData();
formData.append("beforeImg", beforeImageFile);
formData.append("afterImg", afterImageFile);
formData.append("receiptImg", reciptImageFile);
formData.append("repairBook.id", id);
formData.append("content", content);
formData.append("mileage", 연비);
formData.append("inspectDt", selectTime);
if (
beforeImageFile &&
afterImageFile &&
reciptImageFile &&
reciptImageFile &&
content &&
연비 &&
selectTime
) {
mutate(formData);
Toast.fire({
icon: "success",
title: "등록이 성공적으로 완료됐습니다.",
didClose: () => navigate(isGarage ? "/garage" : "/inspector"),
});
} else {
Toast.fire({
icon: "error",
title: "모든 항목은 필수입니다.",
});
}
};
문제
model attribute
형태로 받았는데 형식 또는 이름이 맞지 않다고함원인과 해결
axios
를 사용했을 때 res에 담겨서 주는 것이 문제model attribute
를 사용했기에 매칭되지 않으면 내부로 접근 불가능axios
대신 fetch
로 변경