개발자
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에 다시 뿌리려고하는데 화면에 변화가 없습니다 ㅜㅜ 이렇게 하는거 아닌가요??
답변 1
useQuery 훅이 리턴하는 객체는 refetch 함수를 포함합니다. 구조할당 받으셔서 수동으로 사용할 수 있습니다. 또는 처음에 넘겨주는 옵션 값을 통해 refetch 옵션(마운트 시 리패치 등)을 넘길 수도 있습니다.
익명
작성자
2024년 06월 24일
답변 정말 감사합니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 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
지금 가입하면 모든 질문의 답변을 볼 수 있어요!