개발(Development)/React(리액트)

[React-Query] Query data cannot be undefined 에러 해결 방법

카레유 2022. 8. 24. 21:37

# Query data cannot be undefined 에러 발생 이유

React-Query에서 useQuery를 아래와 같이 사용하면 에러가 발생할 수 있다.

const { data, status} = useQuery(['todo', id], () => {
    fetchByParam(id); 
});

 

만약 이런 에러가 발생 했다면...

Error: Query data cannot be undefined at Object.onSuccess ....

 

이유는 useQuery에 등록한 함수가 Promise를 반환하지 않아서이다.

 

분명히 Promise 를 반환하는 fetch나 axios 함수를 썼겠지만,

호출만하고 리턴은 하지 않았을 수 있다.

 

# Query data cannot be undefined 해결 방법

해결방법은 Promise 반환하도록 해주면 된다.

화살표함수 문법으로 바로 리턴하거나, 중괄호 내부에서 명시적으로 리턴해주면 된다.

 

1. 화살표 함수로 바로 리턴한다.

- "중괄호 없이" 화살표함수를 사용해서 바로 리턴하는 것에 유의하자.

const { data, status } = useQuery(['todos', id], () => fetchByParam(id));

 

2. 중괄호 내부에서 명시적으로 return문을 써준다.

const { data, status } = useQuery(['todos', id], () => {
    return fetchByParam(id); // Promise 를 리턴!!! 해줘야 한다.
});

 

2번과 같은 케이스를 응용하면, 아래와 같이 async/await 를 사용해 등록할 수도 있다.

useQuery(['todos', id], async () => {
  const data = await fetchByParam(id)
  return data
});

 

해결 완료.