TanStackT
TanStackโ€ข6mo agoโ€ข
7 replies
verbal-lime

Search-Typing issue

Hey ๐Ÿ‘‹๐Ÿฝ .
I love tanstack router. Does somebody know why following works:

import { createFileRoute } from "@tanstack/react-router";
import { z } from "zod";
import { Login } from "shared-features/login";

export const Route = createFileRoute("/login")({
  validateSearch: z.object({
    redirect: z.string().catch("/app"),
  }),
  component: LoginComponent,
});

function LoginComponent() {
  const navigate = Route.useNavigate();
  const redirect = Route.useSearch({ select: (search) => search.redirect });

  const handleRedirect = () => {
    navigate({
      to: redirect,
      replace: true,
    });
  };

  return (
    <Login title="Hello" onLogin={handleRedirect}/>
  );
}


but following not:
import { createFileRoute } from "@tanstack/react-router";
import { Login } from "shared-features/login";

type LoginSearch = {
  redirect: string;
};

export const Route = createFileRoute("/login")({
  validateSearch: (search): LoginSearch => {
    return {
      redirect: (search.redirect as string) || "/app",
    };
  },
  component: LoginComponent,
});

function LoginComponent() {
  const navigate = Route.useNavigate();
  const redirect = Route.useSearch({ select: (search) => search.redirect });

  const handleRedirect = () => {
    navigate({
      to: redirect,
      replace: true,
    });
  };

  return (
    <Login title="Hello" onLogin={handleRedirect}/>
  );
}


The only difference is that in first version I use zod to validate the search, and in the second I do it myself.
Was this page helpful?