New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More

minimal-react-router

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

minimal-react-router

A lightweight router for React.

1.0.2
latest
Version published
Weekly downloads
1
-93.33%
Maintainers
1
Weekly downloads
 
Created

minimal-react-router

minimal-react-router is a lightweight router for React with a small API.

Uses React hooks and requires a peer dependency of react >=16.8.0.

Installation

npm install minimal-react-router

Example

import { createRouter } from "minimal-react-router";

const router = createRouter(window.history, location.href);
const routes = {
  "/one": () => ComponentOne,
  "/two": () => ComponentTwo
};

function App() {
  // Routes are resolved async so the inital value is undefined.
  // Set a default value for the placeholder.
  const [Component = Spinner] = router.useRoutes(routes);
  return <Component />;
}

API

createRouter

router = createRouter(urlHistory, initialURL)

Creates a router instance.

  • @param urlHistory History object. Implements pushState and replaceState methods.
  • @param initialURL Initial URL string.
  • @returns router

router.useRoutes

[
  result,
  {
    parameters: string[],
    path: PathURL {}
  }
] = router.useRoutes(routes)

A custom React hook that takes a routes object and returns a result of the matching route.

  • @param routes An object describing the routes.
  • @returns [result, { parameters, path }]

router.push

router.push("/new/path")

Navigates to a new path and calls urlHistory.pushState internally. Returns a promise that resolves when all currently loaded routes are resolved.

router.replace

router.replace("/replaced/path")

Replaces the current path and calls urlHistory.replaceState internally. Returns a promise that resolves when all currently loaded routes are resolved.

Objects

Routes object

An object describing the routes.

const routes = {
  "/one": () => ComponentOne,
  "/two": () => ComponentTwo
};
  • Route paths must match absolute paths:
"/foo/bar": () => Component
  • Route paths cannot contain "?" or "#":
"/foo?param#hash": () => Component // Error!
  • If you need to use query params or hashes, use path:
"/foo": ({ path }) => {
  // do something with path.searchParams or path.hash
}
  • Route paths can capture path parts:
"/foo/:param/:anotherParam": ({ parameters }) => {
  // path: "/foo/bar/baz" = parameters: ["bar", "baz"]
}
  • Route paths support wildcards and match from top down:
"/foo/*/": () => FooSomething,
"/foo/*": () => FooEverythingElse
  • Resolvers can be sync or async:
"/home": async () => await isAuthenticated() ? UserHome : Home
  • Resolvers can redirect:
"/oldhome": ({ redirect }) => redirect("/home")
  • Resolvers have access to the path and params that were used to match:
"/foo/:bar/:baz": ({ parameters, path }) => {
  path.toString() // "/foo/some/thing?q=1#hash"
  parameters // ["some", "thing"]
}

PathURL object

A path object similar to URL but only deals with paths, query parameters, and hashes.

Example:

{
  hash: "#hash",
  pathname: "/foo/bar",
  searchParams: URLSearchParams {},
  ensureFinalSlash: () => "/foo/bar/",

  // Case insensitive, final slash insensitive, compares pathname, query params, and hash.
  matches: (path: string | PathURL) => boolean,
  toString: () => "/foo/bar?queryParam=foo#hash"
}

FAQs

Package last updated on 24 Apr 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts