Ecosyste.ms: Awesome

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

Awesome Lists | Featured Topics | Projects

https://github.com/storeon/router

Storeon module for URL routing
https://github.com/storeon/router

Last synced: 7 days ago
JSON representation

Storeon module for URL routing

Awesome Lists containing this project

README

        

# Storeon Router

Storeon logo by Anton Lovchikov

[Storeon] Router solves the problems of routing while seamlessly providing full control.

Its size is 577 bytes (minified and gzipped) and uses [Size Limit] to control size.

[Storeon]: https://github.com/storeon/storeon
[Size Limit]: https://github.com/ai/size-limit

```js
import { createStoreon } from 'storeon'
import { createRouter, routerChanged, routerKey, routerNavigate } from '@storeon/router'

const store = createStoreon([
createRouter([
['/', () => ({ page: 'home' })],
['/blog', () => ({ page: 'blog' })],
['/blog/post/*', (id) => ({ page: 'post', id })],

[
/^blog\/post\/(\d+)\/(\d+)$/,
(year, month) => ({ page: 'post', year, month })
]
])
])

setData(store.get()[routerKey])

store.on(routerChanged, function (_, data) {
setData(data)
})

function navigateToFirstPost () {
store.dispatch(routerNavigate, '/blog/post/first-post')
}

function setData (data) {
document
.querySelector('.data')
.innerText = JSON.stringify(data)
}
```


Sponsored by Evrone

## Installation

```
npm install @storeon/router
# or
yarn add @storeon/router
```

## Examples

* [Vanilla](./examples/vanilla/)
* [React/Preact](./examples/react/)
* [Svelte](./examples/svelte/)

## API

```js
import { createRouter } from '@storeon/router'

const moduleRouter = createRouter([
[path, callback]
])
```

Function `createRouter` could have options:

* __path__: path name can be a string or RegExp.
* __callback__: the callback function must return an object with parameters for this path.

`routerKey` – key for store.

`routerNavigate` – navigation action.

`routerChanged` – change event of pathname.

### Ignore link

Add `data-ignore-router` attribute to the link so that the router ignores it.