vanjs-routing
v1.1.3
Published
Declarative routing for the VanJS framework
Downloads
25
Maintainers
Readme
VanJS Routing
The cleanest, simplest declarative routing solution for the VanJS framework. If you are coming
from React, vanjs-routing
feels similar to react-router.
Install
yarn add vanjs-routing vanjs-core
npm i -S vanjs-routing vanjs-core
Features
- Declare routes with
Router()
using a clean, simple and concise syntax - Use
Link()
instead ofa()
to navigate between pages - Use
navigate()
in areasLink
cannot be used. (E.g. In a side-effect) - Access the router internal state
- Get the current pathname with
getRouterPathname()
- Get the dynamic URL parameters with
getRouterParams()
- Get the query parameters with
getRouterQuery()
- Get the current pathname with
- Supports dynamic URLs (E.g.
/help/:section/:topic
) withgetRouterParams()
- Supports URL prefixing using
Router.basename
. (Useful for sites like Github Pages)
QuickStart
import van from "vanjs-core";
import { Router, Link, getRouterParams, navigate } from "vanjs-routing";
const { div, p, button } = van.tags;
function App() {
return Router({
basename: "vanjs-routing", // Optional base name (All links are now prefixed with '/vanjs-routing')
routes: [
{ path: "/", component: HomeComponent },
{ path: "/about", component: AboutComponent },
{ path: "/help/:section", component: HelpComponent }
]
});
}
function HomeComponent() {
return div(p("Home"), Link({ href: "/about?foo=bar" }, "Goto About"), Link({ href: "/help/profile" }, "Goto Help"));
}
function AboutComponent() {
return div(p("About"), Link({ href: "/" }, "Back to Home"));
}
function HelpComponent() {
van.derive(() => {
console.log(getRouterParams()); // { section: "profile" }
});
return div(
p("Help"),
Link({ href: "/" }, "Back to Home"),
button({ onclick: () => navigate("/") }, "Back to Home (Imperative navigation)")
);
}
van.add(document.body, App());
API Reference
Router
- The
Router
component which you use to define your routes - Each
route
is an object with apath
andcomponent
- The
component
is a function returning anHTMLElement
- The
import { Router } from "vanjs-routing";
Router({
basename?: string,
routes: Array <{
path: string,
component: () => HTMLElement
}>
});
Link
- The
Link
extends thevan.tags.a
component to tap into the router's internal state for navigation Link
is a drop-in replacement forvan.tags.a
- If
replace
is set totrue
, the current route will be replaced with the Link'shref
when clicked
import { Link } from "vanjs-routing";
Link({
replace?: boolean
// Additional van.tags.a props
});
Navigate
- The
navigate
function is useful in areas whereLink
cannot be used. For example in a function or side-effect - If
replace
is set totrue
, the current route will be replaced withhref
instead of pushing to the history stack.
import { navigate } from "vanjs-routing";
navigate(
href,
options ?: {
replace?: boolean
}
)
Router state helpers
getRouterPathname()
returns the current pathnamegetRouterParams()
returns the parameter values in a dynamic routegetRouterQuery()
returns the query parameters
import { getRouterPathname, getRouterParams, getRouterQuery } from "vanjs-routing";
// Route path: /home/:section/:topic
// Current URL: https://hello.com/home/learning/science?tab=intro
console.log(getRouterPathname()); // "/home/learning/science"
console.log(getRouterParams()); // { section: "learning", topic: "science" }
console.log(getRouterQuery()); // { tab: "intro" }
Contributors
Change Log
1.1.3
- Update
package.json
metadata and README documentation
- Update
1.1.2
- Update README documentation
1.1.0
- Added
basename
prop toRouter
component.
- Added