Skip to content

Router

StateMesh ships a built-in router where routing IS state management. Every route transition is a transaction. Every loader is a resource. Every guard is middleware. No other React router reuses the state management primitives this way.

Import

ts
import { defineRoutes, createRouter } from "statemesh-core/router";
import { RouterProvider, Outlet, Link } from "statemesh-core/router";

TIP

Router components (RouterProvider, Outlet, Link, SharedElement, useRouter) are imported from statemesh-core/router, not from statemesh-core.

Quick Example

ts
import { defineRoutes, createRouter } from "statemesh-core/router";

const routes = defineRoutes([
  {
    path: "/",
    component: () => import("./pages/Home"),
    meta: { title: "Home" }
  },
  {
    path: "/products",
    component: () => import("./pages/Products"),
    loader: async ({ mesh }) => {
      return mesh.resource("products.list").fetch({ search: "" });
    },
    children: [
      {
        path: ":id",
        component: () => import("./pages/ProductDetail"),
        loader: async ({ params, mesh }) => {
          return mesh.resource("product.detail").fetch({ id: params.id });
        }
      }
    ]
  },
  {
    path: "*",
    component: () => import("./pages/NotFound")
  }
]);

const router = mesh.router(routes, {
  basename: "/app",
  scrollRestoration: true
});
tsx
import { RouterProvider, Outlet, Link } from "statemesh-core/router";

function App() {
  return (
    <StateMeshProvider mesh={mesh}>
      <RouterProvider router={router} mesh={mesh} routes={routes}>
        <Layout />
      </RouterProvider>
    </StateMeshProvider>
  );
}

function Layout() {
  return (
    <div>
      <nav>
        <Link to="/">Home</Link>
        <Link to="/products">Products</Link>
      </nav>
      <Outlet />
    </div>
  );
}

What's Included

FeatureDescriptionPage
RoutesRoute definitions, nested routes, lazy loadingRoutes
NavigationLink, useNavigate, useParams, useSearchNavigation
Guards & MiddlewareRoute guards, middleware, redirectGuards
Data LoadingLoaders, dependencies, error recovery, rollbackData Loading
AdvancedKeep-alive, prefetch, shared elements, analyticsAdvanced
SEO & MetaRoute metadata, document title, Open GraphSEO

Released under the MIT License.