1. React Query has a huge bundle size. The bundle size you save by the code you don't have to write.
  2. We can't even fetch on a button click: it is true because React Query is declarative by default. We write the useQuery hook with queryKey and queryFn in it, and it runs automatically. First, useQuery tries to access the data from the cache, and if they don't exist, it will go and fetch data.
function Task(){
	const [appliedFilters, setAppliedFilters] = useState()
	const {data} = useQuery({
		queryKey:["tasks", appliedFilters ]
		queryFn:()=>fetchTasks(appliedFilters)
	})
	return(
		<FilterForm onApply={setAppliedFilters} />
	)
}

we have to store applyFilter somewhere like useState, when those applied filters change, the queryKey changes, react query will see a new queryKey and then it will fetch the data automatically, and this approach will get us from the imperative thinking like if i click that button, i want to do some fetching towards the declarative form of you know i want data that matches this state.

  1. There is no normalised caching.