카테고리 없음
react-query 실무
홍순2
2024. 3. 7. 00:32

백엔드에 저장된 데이터를 변경하면 Tanstack쿼리는 자동으로 변경이 이루어진다.
리액트쿼리는 응답 데이터를 캐시 처리한다 이전 useEffect와 fetch를 이용할때는 새요청을 전송해서 모든 데이터를 다시 가져왔어야 했는데(화면에 로딩 스피너가 뜨면서 1초후에 데이터를 보여준다.) 리액트 쿼리를 사용하면 그전에 했던 수고를 덜고 데이터를 즉각적으로 제공되면서 로딩중 로딩 스피너가 뜨지 않고 바로바로보여준다.

import { useRef, useState } from "react";
import { useQuery } from "@tanstack/react-query";
import { fetchEvents } from "../../util/http";
import LoadingIndicator from "../UI/LoadingIndicator";
import ErrorBlock from "../UI/ErrorBlock";
import EventItem from "./EventItem";
export default function FindEventSection() {
const searchElement = useRef();
const [searchTerm, setSearchTerm] = useState();
const { data, isLoading, isError, error } = useQuery({
queryKey: [
"events",
{ search: searchTerm },
] /*검색어와 일치하는 이벤트만 가져옴 */,
queryFn: ({ signal }) =>
fetchEvents({
signal,
searchTerm,
}) /*리액트 쿼리는 fetchEvents에 객체를 전달하고 이 객체에 signal과 searchTerm이라는 프로퍼티를 설정 */,
enabled: searchTerm !== undefined /* 쿼리 비활성화 */,
});
QueryFunctionContext( Query Functions | TanStack Query Docs )는 쿼리 함수에 전달되는 객체이다 객체안에 signal 속성을 객체구조 분해할당을 해서 취소신호를 전달할것이다.리액트 쿼리 커스텀 훅안에 queryFn: ({signal})객체를 화살표 함수를 통해 => fetchEvents 함수로 전달한다. fetchEvents인자에 ({signal,searchTerm)}을 키-값으로 설정하였다.
잠깐!!! 여기서 객체 구조분해란 객체로부터 속성을 해체하여 객체의 원래 속성명과는 다른 이름의 변수에 할당할 수 있는것이다 리액트에서 props 객체구조 분해는 부모 components에서 객체 구조분해 한 것을 자식 components props로 전달해준다.
구조분해할당 예시
let cart = {product: "Book", price: 30000};
let {product, price} = cart
console.log(product) // Book
console.log(price) // 30000




