React Query - Enable Query

Full Stack Developer and JavaScript and TypeScript enthusiastic.
Search for a command to run...

Full Stack Developer and JavaScript and TypeScript enthusiastic.
No comments yet. Be the first to comment.
Hey Folks, Today I want to share two important things if you are using ReactQuery. The first is how the keys are composed, and the second is how to prefetch data to reduce the user's wasted time. So let's start 🚀 Keys As you have already learned in ...
Today, I wanna show you how to set up your devices with Antigravity using only the agentic mode, without touching any code. At the last CodeMotion Rome, I got my special badge. A CM Node, a special ha

As a developer, you have to take control of your projects every day. Whether it is a company repository, an open source project you maintain or collaborate on, or a simple pet project. Gaining control over your projects often depends on the platform ...

My Antigravity first experience

Write clear and insightful commit messages using AI and GitLens.

We are in the AI era. New models emerge daily, and many applications have already integrated AI into their workflows. Gemini, OpenAI, Copilot, Deepseek, Llama, and many others enable AI in your applications or help you write code, but they all need a...

Hey folks,
Do you know that you can enable or disable a query in react query? Noooo! Ok, it's time to learn it!
Some specific hooks must be enabled only if there are some data in the application; for instance, some queries must run only if the users are logged in.
To solve this problem, the useQuery hooks accept an option called enabled that accepts a boolean to determine if a condition is true or false.
Let's take a look at this example
import { useQuery } from '@tanstack/react-query';
import { QUERY_KEY } from 'src/app/constants/queryKeys';
import { Todo } from 'src/app/models';
import { User, useUser } from '../../../../auth/useUser';
import { ResponseError } from '../../../../utils/Errors/ResponseError';
const fetchTodos = async (user: User): Promise<Todo[]> => {
const response = await fetch(`api/tasks?assigneeId=${user.user.id}`, {
headers: {
Authorization: `Bearer ${user.accessToken}`,
},
});
if (!response.ok) {
throw new ResponseError('Failed to fetch my todos', response);
}
return await response.json();
};
interface UseMyTodos {
todos: Todo[];
error?: string;
}
function mapError(error: unknown | undefined): undefined | string {
if (!error) return undefined;
if (error instanceof ResponseError) return error.response.statusText;
if (error instanceof Error) return error.message;
return 'Unknown error';
}
export const useMyTodos = (): UseMyTodos => {
const { user } = useUser();
const { data: todos = [], error } = useQuery(
[QUERY_KEY.myTodos],
() => fetchTodos(user!),
{
refetchOnWindowFocus: false,
retry: 2,
enabled: !!user,
}
);
return {
todos,
error: mapError(error),
};
};
As you can notice, in this case, a custom hook calls the API and gets all the todos assigned to the current users.
The key point of this example stands in the enabled option. As you can see, this useQuery is called only if there is a user; else, the query is stopped.
This feature permits developers to be sure to call a specific API only if a condition is satisfied, preventing a bad API request.
This feature is pretty simple but very powerful, as you can imagine!
To find out more about the enabled option take a look at my youtube video about it
Ok, that's all from the enabled option.
I hope you enjoyed this content!
See you soon folks
Bye Bye 👋
p.s. you can find the code of the video here