REACT

React-Query 기본 사용법

제이.L 2023. 3. 2. 14:52

React-Query는 React 애플리케이션에서 데이터 관리를 위한 라이브러리입니다. React-Query를 사용하면 서버에서 가져온 데이터를 캐싱하고, 상태 업데이트와 재요청 등을 자동으로 처리할 수 있습니다.

React-Query를 사용하려면 다음과 같은 단계를 따릅니다.

 

  • React-Query 설치
npm install react-query
yarn add react-query

 

  • Query 컴포넌트 작성

React-Query에서 제공하는 useQuery 훅을 사용하여 데이터를 가져옵니다.

useQuery 훅은 data, isLoading, isError 등의 상태 값을 반환합니다.

import { useQuery } from 'react-query';

function App() {
  const { data, isLoading, isError } = useQuery('todos', async () => {
    const response = await fetch('/api/todos');
    return response.json();
  });

  if (isLoading) {
    return <div>Loading...</div>;
  }

  if (isError) {
    return <div>Error occurred while fetching data</div>;
  }

  return (
    <ul>
      {data.map(todo => (
        <li key={todo.id}>{todo.title}</li>
      ))}
    </ul>
  );
}

위의 예시에서 useQuery 훅은 'todos'라는 고유한 이름의 쿼리를 만들어 API에서 데이터를 가져옵니다.

 

  • Mutation 컴포넌트 작성

React-Query에서 제공하는 useMutation 훅을 사용하여 데이터를 수정합니다.

import { useMutation } from 'react-query';

function App() {
  const [text, setText] = useState('');

  const { mutate, isLoading } = useMutation(
    async newTodo => {
      const response = await fetch('/api/todos', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
        },
        body: JSON.stringify(newTodo),
      });
      return response.json();
    },
    {
      onSuccess: () => {
        queryClient.invalidateQueries('todos');
      },
    }
  );

  const handleSubmit = e => {
    e.preventDefault();
    mutate({ title: text });
    setText('');
  };

  return (
    <form onSubmit={handleSubmit}>
      <input type="text" value={text} onChange={e => setText(e.target.value)} />
      <button disabled={isLoading}>Add</button>
    </form>
  );
}

 

위의 예시에서 useMutation 훅은 데이터를 수정하는 mutate 함수를 반환합니다.

mutate 함수를 호출하면 API에 데이터를 보내고, onSuccess 콜백에서 queryClient.invalidateQueries 함수를 호출하여 todos 쿼리를 재요청합니다.

 

React-Query는 다양한 기능을 제공하며, 위에서는 간단한 예시만을 다루었습니다.

더 자세한 내용은 공식 문서를 참고하세요.

https://react-query-v3.tanstack.com/

 

반응형