React Query (maintenant appelé TanStack Query) est une bibliothèque de récupération de données et de gestion d'état extrêmement populaire pour les applications React. Il simplifie le travail avec des données distantes en gérant les complexités de la récupération, de la mise en cache, de la synchronisation et de la pagination des données. React Query élimine une grande partie du processus manuel impliqué dans la création de requêtes API, le stockage et la mise à jour des données et la gestion des états de chargement.
TanStack Query aide les développeurs à gérer l'état du serveur dans les applications React avec une configuration minimale, garantissant une expérience utilisateur fluide, en particulier lorsqu'il s'agit d'opérations asynchrones.
React Query est un outil de récupération de données et de gestion de l'état qui aide à simplifier le processus d'interaction avec les données côté serveur dans les applications React. Il résume et gère la récupération, la mise en cache, la synchronisation et la mise à jour en arrière-plan des données.
Il est principalement utilisé pour gérer l'état du serveur, qui fait référence aux données provenant d'un serveur ou d'une API distant, comme les données des API REST, de GraphQL ou de toute autre source de données.
Principales caractéristiques :
Les requêtes dans React Query sont utilisées pour récupérer des données à partir d'un serveur (ou de toute source de données externe). Une requête est identifiée par une clé unique, que React Query utilise pour mettre en cache et suivre les données.
import { useQuery } from 'react-query'; function fetchPosts() { return fetch('https://jsonplaceholder.typicode.com/posts') .then((response) => response.json()); } const Posts = () => { const { data, error, isLoading } = useQuery('posts', fetchPosts); if (isLoading) return <div>Loading...</div>; if (error) return <div>Error fetching posts</div>; return ( <ul> {data.map((post) => ( <li key={post.id}>{post.title}</li> ))} </ul> ); };
Les mutations sont utilisées pour modifier ou créer des données sur le serveur (par exemple, requêtes POST, PUT, DELETE). Comme les requêtes, les mutations peuvent être suivies et mettre automatiquement à jour votre état après une mutation réussie.
import { useMutation } from 'react-query'; function createPost(postData) { return fetch('https://jsonplaceholder.typicode.com/posts', { method: 'POST', body: JSON.stringify(postData), headers: { 'Content-Type': 'application/json' }, }).then((response) => response.json()); } const NewPost = () => { const mutation = useMutation(createPost); const handleCreatePost = async () => { await mutation.mutate({ title: 'New Post', body: 'This is a new post' }); }; return ( <div> <button onClick={handleCreatePost}>Create Post</button> {mutation.isLoading ? <p>Creating post...</p> : null} {mutation.isError ? <p>Error creating post</p> : null} {mutation.isSuccess ? <p>Post created!</p> : null} </div> ); };
React Query met automatiquement en cache les résultats des requêtes. Cette mise en cache permet un rendu plus rapide et évite de faire des requêtes en double au serveur. Les données mises en cache sont automatiquement mises à jour lorsqu'une requête est récupérée.
Vous pouvez personnaliser le comportement de la mise en cache en fonction des besoins de votre application, comme définir une durée de cache ou spécifier une heure d'expiration (l'heure après laquelle les données mises en cache sont considérées comme obsolètes).
const { data } = useQuery('posts', fetchPosts, { staleTime: 1000 * 60 * 5, // Cache is fresh for 5 minutes cacheTime: 1000 * 60 * 30, // Cache persists for 30 minutes });
React Query fournit une prise en charge intégrée de la pagination. Vous pouvez récupérer des données paginées avec des paramètres de page et de limite personnalisés, et les réponses seront mises en cache de manière appropriée.
const fetchPage = (page) => fetch(`https://jsonplaceholder.typicode.com/posts?_page=${page}&_limit=10`) .then((res) => res.json()); const PaginatedPosts = () => { const [page, setPage] = React.useState(1); const { data, isLoading, isError } = useQuery(['posts', page], () => fetchPage(page)); if (isLoading) return <div>Loading...</div>; if (isError) return <div>Error</div>; return ( <div> <ul> {data.map((post) => ( <li key={post.id}>{post.title}</li> ))} </ul> <button onClick={() => setPage((prev) => prev - 1)} disabled={page === 1}> Previous </button> <button onClick={() => setPage((prev) => prev + 1)}>Next</button> </div> ); };
Pour utiliser React Query, vous devrez installer React-Query (TanStack Query) :
npm install react-query
Pour activer React Query dans votre application, vous devez envelopper votre composant racine dans QueryClientProvider pour fournir le contexte nécessaire à l'ensemble de l'application.
import { QueryClient, QueryClientProvider } from 'react-query'; const queryClient = new QueryClient(); const App = () => ( <QueryClientProvider client={queryClient}> <YourApp /> </QueryClientProvider> );
React Query prend en charge la pagination et le défilement infini avec useInfiniteQuery, vous permettant de gérer des listes et une pagination infinies.
import { useInfiniteQuery } from 'react-query'; function fetchPostsPage({ pageParam = 1 }) { return fetch(`https://jsonplaceholder.typicode.com/posts?_page=${pageParam}`) .then((res) => res.json()); } const InfinitePosts = () => { const { data, fetchNextPage, hasNextPage, isLoading, isFetchingNextPage, } = useInfiniteQuery('posts', fetchPostsPage, { getNextPageParam: (lastPage, allPages) => lastPage.length === 10 ? allPages.length + 1 : false, }); return ( <div> {isLoading ? <div>Loading...</div> : null} {data?.pages.map((page, i) => ( <div key={i}> {page.map((post) => ( <p key={post.id}>{post.title}</p> ))} </div> ))} <button onClick={() => fetchNextPage()} disabled={!hasNextPage || isFetchingNextPage}> {isFetchingNextPage ? 'Loading more...' : hasNextPage ? 'Load More' : 'No more posts'} </button> </div> ); };
Vous pouvez invalider une requête manuellement en utilisant queryClient.invalidateQueries. Cela force une nouvelle récupération des données pour la clé de requête spécifiée.
import { useQuery } from 'react-query'; function fetchPosts() { return fetch('https://jsonplaceholder.typicode.com/posts') .then((response) => response.json()); } const Posts = () => { const { data, error, isLoading } = useQuery('posts', fetchPosts); if (isLoading) return <div>Loading...</div>; if (error) return <div>Error fetching posts</div>; return ( <ul> {data.map((post) => ( <li key={post.id}>{post.title}</li> ))} </ul> ); };
React Query réduit le passe-partout pour la gestion des états de chargement, de réussite et d'erreur, ce qui rend la récupération des données plus facile et plus déclarative.
Les données récupérées sont mises en cache par défaut, ce qui réduit les requêtes réseau inutiles et accélère votre application.
React Query fournit une récupération de données en arrière-plan, garantissant que les données de votre application restent à jour même lorsqu'elles ne sont pas explicitement récupérées.
La gestion de la pagination et du défilement infini est simple et efficace grâce aux hooks intégrés de React Query.
React Query fournit une excellente interface DevTools pour inspecter les requêtes, les mutations et leurs états en temps réel.
**
React Query (TanStack Query) fournit un moyen efficace et évolutif de gérer la récupération de données et la gestion de l'état dans les applications React. Grâce à la mise en cache intégrée, à la récupération en arrière-plan, à la pagination et à la gestion des erreurs, React Query facilite et transparente l'interaction avec les données côté serveur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!