어제 서버 연결하는 코드를 useQuery를 사용해서 리팩토링을 하려고 하는데
데이터가 필요한 해당 페이지에서 자꾸 undefined가 떴었다.
get 에서는 분명 data가 잘 찍히는 걸 확인할 수 있는데, 이상하게 useQuery가 토해낸 data는 undefined가 떴었다.
이것저것 연구하다가 쿼리펑션에 then을 붙여서 response를 바로 state에 set하는식으로 할까도 했지만
const { data } = useQuery({
queryKey: ["getPros1Data"],
queryFn: () => {
getPros1Data(urlReqCompanyName).then((response) =>
setDataState(response)
);
},
});
사실 이렇게 코드를 자면 유즈쿼리를 쓴 이유가 없지 않나 생각했다.
능력자 ㅈㅇ님이 마침 오셔서 (나의 스승님 >_<)
연구를 해보는데 이것저것 하다가 발견하게 된 것은!!!!!!
이유 : 타입핑을 해주지 않았었기 때문!!(타입스크립트에서 사용하고 있으니까!!!!!!!!!)
이건 ㅈㅇ님이 인터페이스로 타입지정을 해주고, useQuery에다가 타입지정을 하는걸로 해결하신 코드
const usePropsQuery = () => {
const [testData, setTestData] = useState({});
const { data } = useQuery<RootObject>("temp", async () => {
const { data } = await axios.get(
"https://jsonplaceholder.typicode.com/todos/1"
);
return data;
});
이 코드를 예시로 참고해서
난 요런 인터페이스를 만들어서 코드 수정을 했다
interface ServerResponseType {
company: string;
[key: string]: number | string;
}
그렇게 해서 완성된 부분의 코드 ㅎㅅㅎ
import axios from "axios";
interface surverResponseType {
company: string;
[key: string]: number | string;
}
export const getPros1Data = async (urlReqCompanyName: string) => {
const { data } = await axios.get(
"https://jsonplaceholder.typicode.com/todos/1"
);
console.log("api의 data", data);
return data;
};
import { useQueryClient, useQuery } from "react-query";
import { useEffect, useState } from "react";
import axios from "axios";
interface ServerResponseType {
company: string;
[key: string]: number | string;
}
const usePropsQuery = (urlReqCompanyName: string) => {
const [sheetData, setSheetData] = useState({});
const { data } = useQuery<ServerResponseType>("getPros1Data", async () => {
const { data } = await axios.get(
`https://sheet.best/api/sheets/96f08cd2-b20d-452a-8442-517f9353968f/company/${urlReqCompanyName}`
);
return data;
});
useEffect(() => {
if (data) {
setSheetData(data);
console.log("data에 변화감지시 useEffect실행");
}
}, [data]);
return { sheetData };
};
export default usePropsQuery;
'💃 타입스크립트 공부' 카테고리의 다른 글
구글 스프레드시트를 서버 API로 연결하기 (리액트+타입스크립트) (1) | 2023.01.20 |
---|---|
1/17 타입스크립트 공부노트 ( 코딩애플 타입스크립트 강의!! ) (1) | 2023.01.17 |
[TS] 타입스크립트 기초 공부! / 삼성 인사이트 포스팅 보면서 공부하깅 (0) | 2023.01.12 |
댓글