TanStackT
TanStack7mo ago
16 replies
dead-brown

Defer viewTransition until component can render without suspending

I don't know if this is supposed to work like this, but I thought the point of view transitions was to hide the loading state?

I tried:

export const Route = createFileRoute("/calendar")({
  validateSearch: zodValidator(searchSchema),
  beforeLoad: ({ search }) => {
    return {
      queries: {
        calendarEventsUpcoming: calendarEventsUpcomingQuery(search.filter),
        calendarEventsCompleted: calendarEventsQuery(search.filter),
      },
    };
  },
  loader: async ({ context: { queryClient, queries } }) => {
    const [upcomingEvents, completedEvents] = await Promise.all([
      queryClient.ensureQueryData(queries.calendarEventsUpcoming),
      queryClient.ensureQueryData(queries.calendarEventsCompleted),
    ]);
    return { upcomingEvents, completedEvents };
// ...

function RouteComponent() {
  const { queries } = useRouteContext({ from: "/calendar" });
  const { data: upcomingData } = useSuspenseQuery(
    queries.calendarEventsUpcoming,
  );
  const { data: completedData } = useSuspenseQuery(
    queries.calendarEventsCompleted,
  );
  const navigate = useNavigate({ from: "/incidents/retrospectives" });
  const search = useSearch({ from: "/incidents/retrospectives" });

  const handleFilter = (value: string) => {
    void navigate({
      search: {
        filter: value,
      },
      viewTransition: true,
    });
  };


But in my case, this triggers a view transition into my defaultPendingComponent before it does a contentful paint. I thought it would wait with the view transition until the component can render without suspending
Was this page helpful?