T
TanStack8mo ago
genetic-orange

useSearch and conetext are not typed it search types as any and context to {}

My main.tsx
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { createRouter, RouterProvider } from "@tanstack/react-router";

import ReactDOM from "react-dom/client";

import { routeTree } from "./routeTree.gen";

import "./globals.css";

const queryClient = new QueryClient();

// Set up a Router instance
const router = createRouter({
routeTree,
context: {
queryClient,
},
defaultPreload: "intent",
// Since we're using React Query, we don't want loader calls to ever be stale
// This will ensure that the loader is always called when the route is preloaded or visited
defaultPreloadStaleTime: 0,
});

// Register things for typesafety
declare module "@tanstack/react-router" {
interface Register {
router: typeof router;
}
}

const rootElement = document.getElementById("root")!;

if (!rootElement.innerHTML) {
const root = ReactDOM.createRoot(rootElement);
root.render(
<QueryClientProvider client={queryClient}>
<RouterProvider router={router} />
</QueryClientProvider>
);
}
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { createRouter, RouterProvider } from "@tanstack/react-router";

import ReactDOM from "react-dom/client";

import { routeTree } from "./routeTree.gen";

import "./globals.css";

const queryClient = new QueryClient();

// Set up a Router instance
const router = createRouter({
routeTree,
context: {
queryClient,
},
defaultPreload: "intent",
// Since we're using React Query, we don't want loader calls to ever be stale
// This will ensure that the loader is always called when the route is preloaded or visited
defaultPreloadStaleTime: 0,
});

// Register things for typesafety
declare module "@tanstack/react-router" {
interface Register {
router: typeof router;
}
}

const rootElement = document.getElementById("root")!;

if (!rootElement.innerHTML) {
const root = ReactDOM.createRoot(rootElement);
root.render(
<QueryClientProvider client={queryClient}>
<RouterProvider router={router} />
</QueryClientProvider>
);
}
and index.tsx
import { createFileRoute } from "@tanstack/react-router";
import { fallback, zodSearchValidator } from "@tanstack/router-zod-adapter";

import { z } from "zod";
import { directionSchema, sortBySchema } from "../types";

const homeSearchSchema = z.object({
sortBy: fallback(sortBySchema, "id").default("id"),
order: fallback(directionSchema, "desc").default("desc"),
});

export const Route = createFileRoute("/")({
component: HomeComponent,
validateSearch: zodSearchValidator(homeSearchSchema),
beforeLoad: async ({ context, search }) => {},
});

function HomeComponent() {
const { order, sortBy } = Route.useSearch();

return <div className="mx-auto max-w-3xl p-4">Hello</div>;
}
import { createFileRoute } from "@tanstack/react-router";
import { fallback, zodSearchValidator } from "@tanstack/router-zod-adapter";

import { z } from "zod";
import { directionSchema, sortBySchema } from "../types";

const homeSearchSchema = z.object({
sortBy: fallback(sortBySchema, "id").default("id"),
order: fallback(directionSchema, "desc").default("desc"),
});

export const Route = createFileRoute("/")({
component: HomeComponent,
validateSearch: zodSearchValidator(homeSearchSchema),
beforeLoad: async ({ context, search }) => {},
});

function HomeComponent() {
const { order, sortBy } = Route.useSearch();

return <div className="mx-auto max-w-3xl p-4">Hello</div>;
}
order and sortBy types as any context typed as {} What I'm doing wrong ? NOTE: this is a react vite project and I manually added tanstack-router and tanstack-query
6 Replies
genetic-orange
genetic-orangeOP8mo ago
GitHub
GitHub - inam95/tanstack-playground
Contribute to inam95/tanstack-playground development by creating an account on GitHub.
mere-teal
mere-teal8mo ago
a few things latest zod does not not need the zodSearchValidator anymore. also, please use @tanstack/zod-adapter instead
diff --git a/src/routes/index.tsx b/src/routes/index.tsx
index 11ac5ea..186d7cb 100644
--- a/src/routes/index.tsx
+++ b/src/routes/index.tsx
@@ -1,5 +1,5 @@
import { createFileRoute } from "@tanstack/react-router";
-import { fallback, zodSearchValidator } from "@tanstack/router-zod-adapter";
+import { fallback } from "@tanstack/zod-adapter";

import { z } from "zod";
import { directionSchema, sortBySchema } from "../types";
@@ -11,7 +11,7 @@ const homeSearchSchema = z.object({

export const Route = createFileRoute("/")({
component: HomeComponent,
- validateSearch: zodSearchValidator(homeSearchSchema),
+ validateSearch: homeSearchSchema,
beforeLoad: async ({ context, search }) => {},
});
diff --git a/src/routes/index.tsx b/src/routes/index.tsx
index 11ac5ea..186d7cb 100644
--- a/src/routes/index.tsx
+++ b/src/routes/index.tsx
@@ -1,5 +1,5 @@
import { createFileRoute } from "@tanstack/react-router";
-import { fallback, zodSearchValidator } from "@tanstack/router-zod-adapter";
+import { fallback } from "@tanstack/zod-adapter";

import { z } from "zod";
import { directionSchema, sortBySchema } from "../types";
@@ -11,7 +11,7 @@ const homeSearchSchema = z.object({

export const Route = createFileRoute("/")({
component: HomeComponent,
- validateSearch: zodSearchValidator(homeSearchSchema),
+ validateSearch: homeSearchSchema,
beforeLoad: async ({ context, search }) => {},
});
genetic-orange
genetic-orangeOP8mo ago
Okay but is that the case why i don't get the type safey for search and context ?
sensitive-blue
sensitive-blue8mo ago
genetic-orange
genetic-orangeOP8mo ago
got it thanks
ambitious-aqua
ambitious-aqua8mo ago
Thanks, this was very helpful

Did you find this page helpful?