I'm using react query to fetch data on a blog post, according to its Id. When I visit a certain blogpost and then navigate to another one, it first presents me the data from the previous blogPost, and then re-render the page with the new information. It seems that the data is first of all fetched from the cache, and after that get refreshed.
Code:
const BlogPost = () => {
// Getting the blogPostId from the Url
const { blogPostId } = useParams();
// Querying the blogPostData from the server using its id. (here is the problem probably...)
const { data: blogPostData } = useQuery<BlogPostType>({
queryKey: ["getBlogPost"],
queryFn: () => apiClient.getPostById(blogPostId),
});
return (
<div>
<h1>{blogPostData?.title}</h1>
<hr/>
<p>{blogPostData?.description}</p>
</div>
);
};
Any solution? (I want that the new data will appear immediately)
The blog post ID must be part of the key.
const { data: blogPostData } = useQuery<BlogPostType>({
queryKey: ["getBlogPost", blogPostId],
queryFn: () => apiClient.getPostById(blogPostId),
});
As documented:
When a query needs more information to uniquely describe its data, you can use an array with a string and any number of serializable objects to describe it. [...] It's common to pass an ID, index, or other primitive to uniquely identify the item:
useQuery({ queryKey: ['todo', 5], ... })
The same pattern applies to swr, and in fact is somewhat of an analogue to the deps you'd give useEffect.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With