>웹 프론트엔드 >JS 튜토리얼 >React Query에서 데이터베이스 쿼리 성능을 최적화하기 위한 팁

React Query에서 데이터베이스 쿼리 성능을 최적화하기 위한 팁

PHPz
PHPz원래의
2023-09-26 15:25:081010검색

在 React Query 中优化数据库查询性能的技巧

React Query에서 데이터베이스 쿼리 성능을 최적화하기 위한 팁

React Query는 프런트엔드 애플리케이션의 성능을 최적화하기 위한 다양한 편리한 도구를 제공하는 강력한 데이터 관리 라이브러리입니다. 그중에서도 데이터베이스 쿼리 성능을 최적화하는 것은 주목할 만한 중요한 측면입니다. 이 글에서는 구체적인 코드 예제와 함께 React Query에서 데이터베이스 쿼리 성능을 최적화하기 위한 몇 가지 팁을 다룰 것입니다.

  1. Batch query

React Query에서는 단일 데이터 쿼리를 수행하기 위해 useQueryhook 기능을 사용하는 것이 일반적입니다. 그러나 여러 유사한 데이터를 쿼리해야 하는 경우 일괄 쿼리를 사용하면 성능이 크게 향상될 수 있습니다. 데이터베이스의 여러 사용자 정보를 예로 들면, 각 사용자를 개별적으로 쿼리하는 대신 모든 사용자 ID가 포함된 배열을 전달하여 일괄적으로 사용자 정보를 얻을 수 있습니다.

import { useQuery } from 'react-query';

const getUsers = async (ids) => {
  const response = await fetch(`/api/users?ids=${ids.join(',')}`);
  const data = await response.json();
  return data;
};

const UserList = () => {
  const userIds = [1, 2, 3, 4, 5];
  const { data } = useQuery(['users', userIds], () => getUsers(userIds));
  
  return (
    <ul>
      {data.map(user => (
        <li key={user.id}>{user.name}</li>
      ))}
    </ul>
  );
};
  1. 데이터 캐싱

기본적으로 React Query는 후속 구성 요소 렌더링에 사용하기 위해 쿼리에서 반환된 데이터를 메모리에 캐시합니다. 이는 여러 구성 요소가 동일한 쿼리 결과를 사용해야 하는 경우 React Query는 쿼리를 한 번만 실행하고 여러 구성 요소가 동일한 데이터를 공유한다는 것을 의미합니다. 이 데이터 캐싱 메커니즘은 불필요한 데이터베이스 쿼리를 크게 줄이고 성능을 향상시킬 수 있습니다.

const UserProfile = ({ userId }) => {
  const { data } = useQuery(['user', userId], () => getUser(userId));
  
  return (
    <div>
      <h2>{data.name}</h2>
      <p>{data.email}</p>
      <p>{data.bio}</p>
    </div>
  );
};

const UserPage = () => {
  const userIds = [1, 2, 3, 4, 5];
  
  return (
    <div>
      <h1>User Page</h1>
      {userIds.map(userId => (
        <UserProfile key={userId} userId={userId} />
      ))}
    </div>
  );
};
  1. 데이터 미리 가져오기

미리 로드해야 하는 일부 데이터의 경우 데이터 미리 가져오기 기능을 사용하면 페이지 로딩 속도를 높일 수 있습니다. React Query는 구성 요소를 렌더링하기 전에 데이터를 미리 가져오고 로컬로 캐시하는 것을 지원합니다. 이렇게 하면 구성 요소가 렌더링될 때 필요한 데이터가 이미 캐시에 있으므로 추가 쿼리가 필요하지 않습니다.

import { useQueryClient } from 'react-query';

const Home = () => {
  const queryClient = useQueryClient();
  
  useEffect(() => {
    queryClient.prefetchQuery('users', getUsers);
    queryClient.prefetchQuery('posts', getPosts);
  }, []);
  
  return (
    <div>
      {/* 组件内容 */}
    </div>
  );
};
  1. Data update

데이터베이스 업데이트 작업이 완료된 후 React Query는 관련 구성 요소의 데이터를 자동으로 업데이트하고 다시 렌더링할 수 있습니다. 이는 업데이트 작업을 수동으로 트리거할 필요가 없으며 데이터 업데이트 프로세스가 React Query 내부에 캡슐화되어 있음을 의미합니다. 이러한 방식으로 데이터 일관성에 대한 걱정 없이 비즈니스 로직 구현에 집중할 수 있습니다.

import { useMutation, useQueryClient } from 'react-query';

const updateUser = async (userId, newData) => {
  const response = await fetch(`/api/users/${userId}`, {
    method: 'PUT',
    body: JSON.stringify(newData),
    headers: { 'Content-Type': 'application/json' },
  });
  
  if (!response.ok) {
    throw new Error('更新用户失败');
  }
};

const UserProfile = ({ userId }) => {
  const queryClient = useQueryClient();
  
  const { data } = useQuery(['user', userId], () => getUser(userId));

  const updateUserMutation = useMutation(newData => updateUser(userId, newData), {
    onSuccess: () => {
      queryClient.invalidateQueries(['user', userId]);
    },
  });
  
  const handleUpdateUser = (newData) => {
    updateUserMutation.mutate(newData);
  };
  
  return (
    <div>
      <h2>{data.name}</h2>
      <p>{data.email}</p>
      <p>{data.bio}</p>
      <button onClick={() => handleUpdateUser({ name: 'new name' })}>
        更新用户
      </button>
    </div>
  );
};

위는 React Query에서 데이터베이스 쿼리 성능을 최적화하기 위한 몇 가지 일반적인 팁과 코드 예제입니다. 일괄 쿼리, 데이터 캐싱, 데이터 프리패치 및 데이터 업데이트를 통해 프런트엔드 애플리케이션의 성능을 크게 향상시키는 동시에 불필요한 데이터베이스 쿼리를 줄일 수 있습니다. 이 글이 React Query에서 데이터베이스 쿼리를 최적화하는 데 도움과 지침을 제공할 수 있기를 바랍니다.

위 내용은 React Query에서 데이터베이스 쿼리 성능을 최적화하기 위한 팁의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.