Router
Router is a component that handles route matching and renders the appropriate route component for a given URL.
tsx
import { Router, Route } from "@react-just/router";
import Home from "./components/Home";
import About from "./components/About";
function Routes({ url }: { url: URL }) {
return (
<Router url={url}>
<Route path="/" component={Home} />
<Route path="/about" component={About} />
</Router>
);
}Server Component
The Router component must be used as a Server Component.
Props
tsx
interface RouterProps {
children?: RouteChildren;
url: URL;
}
type RouteChildren =
| Iterable<RouteChildren>
| ReactElement<RouteProps, typeof Route>
| boolean
| null
| undefined;children(optional): Route components that define the application's routing structure. Can includeRoutecomponents or values resulting from conditional rendering, such asboolean,null, orundefined.url: AURLobject representing the current request URL. Typically created from theurlproperty of thereqprop in the App Component.
Examples
Basic Routing with Fallback Route
tsx
import { Router, Route } from "@react-just/router";
import { request } from "react-just/server";
import About from "./components/About";
import Contact from "./components/Contact";
import Home from "./components/Home";
import NotFound from "./components/NotFound";
function AppRoutes() {
const { url } = request();
return (
<Router url={new URL(url)}>
<Route path="/" component={Home} />
<Route path="/about" component={About} />
<Route path="/contact" component={Contact} />
<Route path="*splat" component={NotFound} />
</Router>
);
}Fallback Route
*splat matches any unmatched path and passes it as a parameter named splat.
Nested Routing with Parameters
tsx
import { Router, Route } from "@react-just/router";
import AdminLayout from "./components/AdminLayout";
import FileExplorer from "./components/FileExplorer";
import UserProfile from "./components/UserProfile";
import UsersList from "./components/UsersList";
function Routes({ url }: { url: URL }) {
return (
<Router url={url}>
<Route path="/admin" component={AdminLayout}>
<Route path="/users" component={UsersList} />
<Route path="/users/:userId" component={UserProfile} />
<Route path="/files/*path" component={FileExplorer} />
</Route>
</Router>
);
}Conditional Routes
tsx
import { Router, Route } from "@react-just/router";
import AdminDashboard from "./components/AdminDashboard";
import Home from "./components/Home";
import UserDashboard from "./components/UserDashboard";
function Routes({ url, user }: { url: URL; user: User }) {
return (
<Router url={url}>
<Route path="/" component={Home} />
{user.isAdmin && <Route path="/admin" component={AdminDashboard} />}
<Route path="/dashboard" component={UserDashboard} />
</Router>
);
}