부모-자식 관계인 여러 컴포넌트에서 동일한 서버 데이터를 사용한다. react-query의 useQuery
를 통해 데이터를 불러오려 할 때, 어떤 식으로 코드를 작성하는 것이 좋을까?
최상위 컴포넌트에서 필요한 모든 데이터를 불러온 후, 자식 컴포넌트에게 차례로 props로 내려주는 방식이다.
export function GrandParent() {
const user = useQuery(['user'], fetchUser);
const score = useQuery(['score'], fetchScore);
// ...
return <Parent user={user} score={score} />
}
export function Parent({user, score}) {
// ...
return <Child score={score} />
}
export function Child({score}) {
// ...
}
useQuery
를 호출하고 그 아래 컴포넌트에서는 props로 받아오기만 하면 된다.react-query가 서버 상태를 전역 상태처럼 다룰 수 있다는 장점을 이용한 방법이다.
여러 컴포넌트에서 동시에 useQuery
를 호출하더라도 실제 데이터 페칭은 1번만 이루어지므로 성능도 크게 문제가 되지 않는다.
export function GrandParent() {
const user = useQuery(['user'], fetchUser);
const score = useQuery(['score'], fetchScore);
// ...
return <Parent user={user} score={score} />
}
export function Parent() {
const user = useQuery(['user'], fetchUser);
// ...
return <Child score={score} />
}
export function Child() {
const score = useQuery(['score'], fetchScore);
// ...
}