
Security News
Browserslist-rs Gets Major Refactor, Cutting Binary Size by Over 1MB
Browserslist-rs now uses static data to reduce binary size by over 1MB, improving memory use and performance for Rust-based frontend tools.
react-router-breadcrumbs-hoc
Advanced tools
Just a tiny, flexible, higher order component for rendering breadcrumbs with react-router 4.x
Just a tiny, flexible, higher order component for rendering breadcrumbs with react-router 4.x
site.com/user/id → user / John Doe
Deconstruct a route and return matching breadcrumb components you can render however you like. Render a simple string, a component that fetches a model in order to display the desired content, or just render something totally unrelated to the route.
We are currently using this method @ Koan Inc.
yarn add react-router-breadcrumbs-hoc
or
npm install react-router-breadcrumbs-hoc --save
withBreadcrumbs(routeConfigObject)(MyComponent);
import React from 'react';
import { NavLink } from 'react-router-dom';
import { withBreadcrumbs } from 'react-router-breadcrumbs-hoc';
const UserBreadcrumb = ({ match }) =>
<span>{match.params.userId}</span>; // use match param userId to fetch/display user name
const routes = [
{ path: '/', breadcrumb: 'Home' },
{ path: '/users', breadcrumb: 'Users' },
{ path: '/users/:userId', breadcrumb: UserBreadcrumb },
{ path: '/something-else', breadcrumb: ':)' },
];
// map & render your breadcrumb components however you want
const Breadcrumbs = ({ breadcrumbs }) => (
<div>
{breadcrumbs.map(({ breadcrumb, path, match }) => (
<span key={path}>
<NavLink to={match.url}>
{breadcrumb}
</NavLink>
<span>/</span>
</span>
))}
</div>
);
export default withBreadcrumbs(routes)(Breadcrumbs);
For the above example...
Pathname | Result |
---|---|
/users | Home / Users |
/users/id | Home / Users / John |
/something-else | Home / :) |
Route = {
path: String
breadcrumb: String|Function
matchOptions?: Object
}
Breadcrumb = {
path: String
match: String
breadcrumb: Component
}
withBreadcrumbs(routes: Array<Route>): HigherOrderComponent
// you shouldn't ever really have to use `getBreadcrumbs`, but it's
// exported for convenience if you don't want to use the HOC
getBreadcrumbs({ routes: Array<Route>, pathname: String }): Array<Breadcrumb>
Consider the following route config:
[
{ path: '/users', breadcrumb: 'Users' },
{ path: '/users/:id', breadcrumb: 'Users - id' },
{ path: '/users/create', breadcrumb: 'Users - create' },
]
This package acts like a switch statement and matches the first breadcrumb it can find. So, unfortunately, visiting /users/create
will result in the Users > Users - id
breadcrumbs instead of the desired Users > Users - create
breadcrumbs.
To get the right breadcrumbs, simply change the order:
[
{ path: '/users', breadcrumb: 'Users' },
{ path: '/users/create', breadcrumb: 'Users - create' },
{ path: '/users/:id', breadcrumb: 'Users - id' },
]
Now, /users/create
will match the create breadcrumb first, and all others will fall through to /:id
.
FAQs
Did you know?
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.
Security News
Browserslist-rs now uses static data to reduce binary size by over 1MB, improving memory use and performance for Rust-based frontend tools.
Research
Security News
Eight new malicious Firefox extensions impersonate games, steal OAuth tokens, hijack sessions, and exploit browser permissions to spy on users.
Security News
The official Go SDK for the Model Context Protocol is in development, with a stable, production-ready release expected by August 2025.