Comment Railway a simplifié mon projet backend (et pourquoi c'était la bonne solution)
Pour mon dernier projet IA, je chercher un outil qui me permettait de déployer mon API backend de manière simple et efficace afin de
Cet article explique comment implémenter des mises à jour optimistes avec @tanstack/react-query dans une application de liste de tâches. Découvrez la configuration, la récupération des tâches et les mutations optimistes, avec des exemples de code détaillés.
Les mises à jour optimistes sont une technique permettant d'améliorer l'expérience utilisateur dans les applications web en devançant les réponses du serveur. Plutôt que d'attendre la confirmation du serveur pour mettre à jour l'interface utilisateur, les mises à jour optimistes permettent de refléter immédiatement les changements présumés. Si le serveur confirme la modification, tout va bien. Cependant, si le serveur rejette la demande, l'interface utilisateur revient à l'état précédent.
Dans cet article, nous verrons comment implémenter des mises à jour optimistes en utilisant @tanstack/react-query, une bibliothèque populaire de gestion des requêtes en React.
Assurez-vous d'avoir une application React configurée avec @tanstack/react-query. Si ce n'est pas le cas, vous pouvez l'installer en utilisant npm ou yarn :
npm install @tanstack/react-query
# ou
yarn add @tanstack/react-query
Nous allons examiner l'exemple d'application d'une liste de tâches (To-Do List) pour illustrer les mises à jour optimistes.
Commençons par configurer React Query dans notre application :
import React from 'react';
import ReactDOM from 'react-dom';
import {
QueryClient,
QueryClientProvider
} from '@tanstack/react-query';
import App from './App';
const queryClient = new QueryClient();
ReactDOM.render(
<QueryClientProvider client={queryClient}>
<App />
</QueryClientProvider>,
document.getElementById('root')
);
Ensuite, nous allons implémenter une liste de tâches avec des fonctionnalités de mise à jour optimiste.
import axios from 'axios';
const fetchTodos = async () => {
const { data } = await axios.get('/api/todos');
return data;
};
import React from 'react';
import {
useQuery,
useMutation,
useQueryClient
} from '@tanstack/react-query';
import axios from 'axios';
const Todos = () => {
const queryClient = useQueryClient();
const { data: todos, isLoading } = useQuery(['todos'], fetchTodos);
const updateTodo = useMutation(
(updatedTodo) => axios.put(`/api/todos/${updatedTodo.id}`, updatedTodo),
{
onMutate: async (updatedTodo) => {
await queryClient.cancelQueries(['todos']);
const previousTodos = queryClient.getQueryData(['todos']);
queryClient.setQueryData(['todos'], (old) =>
old.map((todo) =>
todo.id === updatedTodo.id ? { ...todo, ...updatedTodo } : todo
)
);
return { previousTodos };
},
onError: (err, updatedTodo, context) => {
queryClient.setQueryData(['todos'], context.previousTodos);
},
onSettled: () => {
queryClient.invalidateQueries(['todos']);
},
}
);
if (isLoading) return <div>Loading...</div>;
return (
<ul>
{todos.map((todo) => (
<li key={todo.id}>
{todo.text}
<button onClick={() => updateTodo.mutate({ ...todo, completed: !todo.completed })}>
{todo.completed ? 'Undo' : 'Complete'}
</button>
</li>
))}
</ul>
);
};
export default Todos;
Les mises à jour optimistes améliorent significativement l'expérience utilisateur en rendant l'application plus réactive et en réduisant les temps de latence perçus.
N'hésitez pas à adapter ces exemples à vos propres besoins et à explorer plus en profondeur les fonctionnalités offertes par React Query.