Pure functional isomorphic router based on streams. It works consistently on modern browsers and on node.
Any rawth.route
function creates an erre stream connected to the main router stream. These sub-streams will be activated only when their paths will match the current router path. For example:
import route, { router } from 'rawth'
route('/users/:user').on.value(({params}) => {
const {user} = params
console.log(`Hello dear ${user}`)
})
// you can dispatch router events at any time
router.push('/users/gianluca')
The argument passed to the subscribed functions is an URL
object having params
as additional property. The params
array will contain all the matched route parameters
import route, { router } from 'rawth'
route('/:group/:user').on.value(({params}) => {
const {group, user} = params
console.log(`Hello dear ${user}, you are part of the ${group} group`)
})
// you can dispatch router events at any time
router.push('/friends/gianluca')
If you want to unsubscribe to a specific route you need just to end the stream
import route from 'rawth'
const usersRouteStream = route('/users/:user')
// subscribe to the stream as many times as you want
usersRouteStream.on.value(({params}) => { /* */ })
usersRouteStream.on.value(({params}) => { /* */ })
usersRouteStream.on.value(({params}) => { /* */ })
// end the stream
usersRouteStream.end()
You can set the base path and override the router default options using the configure
method
import { configure } from 'rawth'
configure({
base: 'https://example.com',
strict: true
})