T8 React Router
Nested routes
Nested routes don't require special rendering rules. All routes are handled equally and independently from each other.
let App = () => {
let { at } = useRoute();
return (
<>
{at("/about", <About/>)}
{at("/about/contacts", <Contacts/>)}
// ...
</>
);
};
In a type-safe setup, a URL schema of a nested route can inherit certain parameters from the parent route. Such relations (which might as well be other than direct nestedness) can be settled within the URL schema with the schema toolset.
import { createURLSchema } from "url-shape";
import { z } from "zod";
let sectionParams = z.object({
sectionId: z.coerce.number(),
});
export const { url } = createURLSchema({
"/sections/:sectionId": z.object({
params: sectionParams,
}),
"/sections/:sectionId/stories/:storyId": z.object({
params: z.object({
...sectionParams.shape, // Shared params
storyId: z.string(),
}),
}),
});
In such a setup, arbitrary relations between the routes are seen and managed directly, allowing for fine-grained control, including sharing or filtering out certain parameters.
← Type safety | Location provider →