Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/krutsch/router-dom

A lightweight router for everyone
https://github.com/krutsch/router-dom

history javascript link router routing

Last synced: about 1 month ago
JSON representation

A lightweight router for everyone

Awesome Lists containing this project

README

        

# router-dom

> A lightweight router for single-page applications with faster subsequent page-loads by prefetching links during idle time if the user is not saving data.
>
> - it helps to reduce the delay between your pages, to minimize browser HTTP requests and enhance your user's web experience.
> - library agnostic.
> - simple: define your routes, start to listen global event and to route changes.
> - base href support.
> - opt-in errorHandler and formHandler.
> - support in all modern browsers.
> - RegExp and nested Routes.

## Demo

Simple: https://codepen.io/FabianK/pen/vYxXjwv?editors=1000

Advanced: https://page-transitions-router.netlify.app

## Installation

With npm:

```properties
$ npm i router-dom
```

or via CDN:

```html

import Router from "https://cdn.skypack.dev/router-dom";
new Router(...) // see Constructor Documentation

```

## Usage

```html
Home
About


```

## Dependencies

[path-to-regexp](https://github.com/pillarjs/path-to-regexp): Turn a path string such as '/user/:name' into a regular expression

[hydro-js](https://github.com/Krutsch/hydro-js): Renders the view. In order to pass state via an anchor element (data attribute), a mapping on the hydro object is needed.

## Documentation

### Events

- window: beforeRouting & afterRouting

### Constructor

The router class takes an array with at least one entry. Only the path is mandatory.

Either a template or and element will be rendered in your element with attribute `data-outlet`.

You can also specifiy one-level of children.
One more interesting property is the `restoreScroll`.
The second argument is the optional object options: it can take a general errorHandler, a formHandler, a fetchOptions for the form and the scrollBehavior. If there is a formHandler, form submits will handled via attributes on the form element and fetch.

```js
const router = new Router([
{
path: "/",
restoreScroll: true, // defaults to true
},
{
path: "/about",
templateUrl: "/about.html",
leave: ({ from, to, params, state }) => {},
},
{
path: "/contact/:name",
element: "

Drop a message on [...]

" // or an actual Node Element,
beforeEnter: ({ from, to, params, state }) => {},
afterEnter: ({ from, to, params, state }) => {},
},
]);
```

### go

- Takes a path, a state object and optional params. Will redirect to the path.

### removeRoute

- Removes a route from the routes array.

### addRoute

- Adds a route object to the routes array.

### modifyRoute

- Replaces a route with a new one.

### changeOptions

- Replaces the router options.

### static getParams

- Returns the params as key-value pair.