개발자

리액트쿼리 데이터 리패칭 이렇게 하는거 아닌가요?

2024년 06월 24일조회 62

home.jsx const { data, error, isLoading } = useFilteredApartmentData(); <List data={data.result} /> 훅.jsx const useFilteredApartmentData = () => { const queryClient = useQueryClient(); const [filters, setFilters] = useState({ skip: 0, take: 15 }); const { data, error, isLoading } = useQuery({ queryKey: ["aaa", filters], queryFn: () => fetchFilteredApartmentData(filters), placeholderData: keepPreviousData, enabled: !!filters, }); const mutation = useMutation({ mutationFn: (filter) => { fetchFilteredApartmentData(filter); }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["aaa", filters] }); }, }); const updateFilters = (newFilters) => { console.log(newFilters); setFilters(newFilters); mutation.mutate(newFilters); }; return { data, error, isLoading, updateFilters, }; }; export default useFilteredApartmentData; 여기서 처음에 데이터 패칭은 잘 이루어 지는데 fillter가 바뀌면 훅의 updateFilters 가 동작하여 새로운 데이터를 list에 다시 뿌리려고하는데 화면에 변화가 없습니다 ㅜㅜ 이렇게 하는거 아닌가요??

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

포크코딩님의 프로필 사진

useQuery 훅이 리턴하는 객체는 refetch 함수를 포함합니다. 구조할당 받으셔서 수동으로 사용할 수 있습니다. 또는 처음에 넘겨주는 옵션 값을 통해 refetch 옵션(마운트 시 리패치 등)을 넘길 수도 있습니다.

profile picture

익명

작성자

2024년 06월 24일

답변 정말 감사합니다.

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2024년 06월 24일

React Query의 `useMutation` 훅은 주로 서버에 데이터를 저장하거나 수정하는 등의 side effect를 실행시킬 때 사용합니다. 다만 현재 코드에서는 필터 정보를 변경하고, 그에 따라 데이터 패치 쿼리를 재실행하려는 것 같습니다. 이런 경우엔 `useMutation`보다는 직접 `useQuery`의 쿼리 키(queryKey)에 의존성을 두어 자동으로 리패칭이 일어나게 하는 것이 보다 일반적입니다. 즉, 아래와 같이 queryKey가 filters를 참조하도록 하면 filters가 바뀔 때마다 알아서 리패치 됩니다. ```jsx // 훅.jsx const useFilteredApartmentData = () => { const [filters, setFilters] = useState({ skip: 0, take: 15 }); const { data, error, isLoading } = useQuery( ["aaa", filters], () => fetchFilteredApartmentData(filters), { placeholderData: keepPreviousData, enabled: !!filters, } ); const updateFilters = (newFilters) => { setFilters(newFilters); }; return { data, error, isLoading, updateFilters, }; }; ``` 이 접근 방식은 상태 업데이트와 쿼리 리패칭을 명확히 분리해주므로 로직을 이해하기 easier 합니다. `setFilters` 호출만으로 필터 업데이트와 쿼리 리패칭을 동시에 수행할 수 있습니다. 이 방식이 여러분의 요구사항에 맞는지 확인해 보시기 바랍니다. #react #react-query

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!