react-hook-router

Simple experimental browser router using react hooks

Usage no npm install needed!

<script type="module">
  import reactHookRouter from 'https://cdn.skypack.dev/react-hook-router';
</script>

README

react-hook-router

Simple experimental browser router using react hooks

Usage

import React from 'react';
import useRouter from 'react-hook-router';

function MyApp(props) {
    const [routeState, setRouteState] = useRouter({
        // can be any shape
        initialState: {page: 'browse', category: 'furniture'}, 
        getUrlFromState: ({page, category, productId}) => {
            if (page === 'browse') {
                return `/browse/${category}/`;
            } else if (page === 'product') {
                return `/product/${productId}`;
            }
            return '/'; // home page
        getStateFromUrl: url => {
            const [,firstSegment, secondSegment] = url.split('/')
            if (firstSegment === 'browse') {
                return {page: 'browse', category: secondSegment};
            } else if (firstSegment === 'product') {
                return {page: 'product', productId: secondSegment};
            }
            return {page: 'home'};
    });

    switch (routeState.page) {
        case 'browse':
            return (
                <Browse 
                    category={routeState.category}
                    onViewProduct={(productId) => setRouteState({page: 'product', productId})}
                    onViewCategory={(category) => setRouteState({page: 'browse', category})}
                />
            );
        case 'product':
            return <Product productId={routeState.productId} />;
        case 'home':
        default:
            return (
                <Home 
                    onViewCategory={(category) => setRouteState({page: 'browse', category})}
                />
            );
    }
}