TanStackT
TanStack10mo ago
7 replies
sophisticated-purple

Client side routing via react-query

It might be a controversial idea. But after initial loading I wont to run all next loader requests (that happens during soft-navigation) with react-query. Right now, I achieved that behavior with next code
import React from 'react';
import { createFileRoute, ErrorComponent } from '@tanstack/react-router'

import { HomePage } from '@/pages/HomePage';
import { homePageQueryOptions, useHomePageData } from '@/utils/posts/useHomePageData';

export const Route = createFileRoute('/')({
  loader: async ({ context, cause }) => {
    if (cause !== 'preload' || typeof window !== 'undefined') {
      return;
    }
    await context.queryClient.ensureQueryData(homePageQueryOptions())
  },
  component: HomePageComponent,
  errorComponent: ErrorComponent,
})

function HomePageComponent() {
  const { error } = useHomePageData();

  if (error) {
    return <ErrorComponent error={error} />
  }

  return (
    <HomePage />
  )
}

I wrapped every page with such structure.

Can we have usePageData<T> hook for loading loader data from client side via react-query?
Was this page helpful?