Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

capybara-router

Package Overview
Dependencies
Maintainers
1
Versions
49
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

capybara-router

Unfancy react router without flux and redux.

  • 2.12.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

capybara-router

npm version Coverage Status Actions Status

This is a react router without flux and redux.
We just want a simple way to build a Single Page Application.
Define rules that include the component and how to fetch data of the each page in a router.

Installation

npm install capybara-router --save

Live demo

https://kelp404.github.io/capybara-router/

Example

/example

const React = require('react');
const ReactDOM = require('react-dom');
const {Router, RouterView} = require('capybara-router');
const history = require('history');
const axios = require('axios');

const ErrorPage = props => {
  return <h2 className="text-center">{`${props.error}`}</h2>;
};
const Home = props => {
  console.log(props.data);
  return <h2>Home</h2>;
};

const router = new Router({
  history: history.createBrowserHistory(),
  routes: [
    {
      name: 'web',
      uri: '/',
      onEnter: props => {
        document.title = 'Home';
      },
      resolve: {
        data: params => axios({
          method: 'get',
          url: `/data/${params.id}.json`
        }).then(response => response.data)
      },
      component: Home
    }
  ],
  errorComponent: ErrorPage
});

const element = (
  <RouterView>
    <div className="text-center text-muted py-5">
      <div className="spinner-border">
        <span className="sr-only">Loading...</span>
      </div>
    </div>
  </RouterView>
);
ReactDOM.render(element, document.getElementById('root'));

Commands

  • npm start
    Run the debug server on localhost:8000/capybara-router.
  • npm run build
    Build the example app.
  • npm test
    Build test scripts and run tests.

Router

constructor

Generate a instance of Router with your config.
Just allow single instance in your application.

const {Router} = require('capybara-router');
const axios = require('axios');
const history = require('history');

const router = new Router({
  history: history.createBrowserHistory(),
  routes: [
    {
      name: 'web',
      uri: '/',
      isAbstract: false,
      onEnter: props => {
        document.title = 'Web';
      },
      resolve: {
        data: axios({
          method: 'get',
          url: '/data.json'
        }).then(response => response.data)
      },
      component: props => (<p>{JSON.stringify(props.data)}</p>)
    }
  ],
  errorComponent: props => (<h2>Error</h2>)
});
Parameter options.history

Type: Object
Required: required
Please provide history object.

Parameter options.errorComponent

Type: Object
Required: required
The React component for the error page.

Parameter options.routes

Type: Array<Object>
Required: required

Parameter options.routes[].name

Type: String
Required: required
The name of this route.
Use . to make the child route.
Such as web, web.project, web.project.members.

Parameter options.routes[].uri

Type: String
Required: required
The URI of this route.
It support the regular expression.
/users/{userId:[\\w-]{20}} will parse the user id from URL.
.* will match all URL. Use it to define the 404 page.

Parameter options.routes[].isAbstract

Type: Boolean
Default: false
The URI of this route.
An abstract state can have child states but cannot get activated itself. An 'abstract' state is simply a state that can't be transitioned to.

Parameter options.routes[].onEnter

Type: Function (props) => {}
Required: optional
capybara-route will call this function before the component.

Parameter options.routes[].resolve

Type: Object
Required: optional
Define how to fetch data.

Parameter options.routes[].component

Type: Object
Required: optional
The React component.

Parameter options.routes[].loadComponent

Type: Function
Required: optional
The lazy loading function.
Run the lazy loading function when the .component is null.

{
  name: 'web',
  uri: '/path',
  loadComponent: () => import(
    /* webpackChunkName: "chunk-name" */
    './path/component'
  )
}

reload()

Reload the root router view.


go(target, options = {})

Push a state to the history or Replace a state of the history.
If the new URI and the old one are same, it will reload the current page.

Parameter target

Type: String|Object
Required: required
The destination.
String: The target is the URI.
Object:

{
  name: {String},  // The route name.
  params: {Object} // The parameter of the route.
}
Parameter options

Type: Object
Required: optional

Parameter options.replace

Type: Boolean
Default: false
Replace the current state with the new one.

Parameter options.reload

Type: Boolean
Default: false
Reload the root router view.


listen(event, callback)

Listen the change event.

Parameter event

Type: String
The event type.
ChangeStart, ChangeSuccess, ChangeError

Parameter callback

Type: Function
The callback function.
ChangeStart: (action, toState, fromState, next) => {}
ChangeSuccess: (action, toState, fromState) => {}
ChangeError: (error) => {}

Return

Type: Function
Call this function to stop the listen.


renderError(error)

Render the error component.

Parameter error

Type: Object
The Error object.


getCurrentRoute()

Get the current route via router.history and router.routes.

Return

Type: Route


findRouteByName(name)

Find the route by the route name.

Parameter name

Type: String
The route name.

Return

Type: Route

getRouter()

When the instance of Router was created.
This function returns the instance.

const {getRouter} = require('capybara-router');
// new Router({ ... });
const router = getRouter();

Components

RouterView

The router will replace the loading view with the page component.

const {RouterView} = require('capybara-router');
<RouterView>
  <p className="text-center text-muted h3" style={{padding: '20px 0'}}>
    <i className="fa fa-spinner fa-pulse fa-fw"></i> Loading...
  </p>
</RouterView>

Render a SPA link element.

const {Link} = require('capybara-router');
<Link to={`/users/${user.id}`}>{user.id}</Link>
<Link to={{name: 'route-name', params: {paramKey: 'value'}}}>link</Link>

Which sites are using capybara-router?

Keywords

FAQs

Package last updated on 05 Apr 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc