Security News
Fluent Assertions Faces Backlash After Abandoning Open Source Licensing
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
storybook-addon-remix-react-router
Advanced tools
Use Remix React Router in your stories. (Formerly storybook-addon-react-router-v6)
Use Remix React Router in your stories.
Starting with react-router@7
, the package react-router-dom
is deprecated by Remix.
If you still use this package, use the v3
of this addon.
If you have dropped it in favor of react-router
, use the v4
.
✅ Support for React Router v7 with storybook-addon-remix-react-router@4
.
✅ Support for Storybook 8 with storybook-addon-remix-react-router@3
.
✅ You can now use useStoryElement
to inject the story at multiple points.
Install the package
npm i -D storybook-addon-remix-react-router
Add it to your storybook configuration:
// .storybook/main.ts
export default {
addons: ['storybook-addon-remix-react-router'],
} satisfies StorybookConfig;
To add the router to all the stories of a component, simply add it to the decorators
array.
Note that parameters.reactRouter
is optional, by default the router will render the component at /
.
import { withRouter, reactRouterParameters } from 'storybook-addon-remix-react-router';
export default {
title: 'User Profile',
render: () => <UserProfile />,
decorators: [withRouter],
parameters: {
reactRouter: reactRouterParameters({
location: {
pathParams: { userId: '42' },
},
routing: { path: '/users/:userId' },
}),
},
};
To change the config for a single story, you can do the following :
import { withRouter, reactRouterParameters } from 'storybook-addon-remix-react-router';
export default {
title: 'User Profile',
render: () => <UserProfile />,
decorators: [withRouter],
};
export const FromHomePage = {
parameters: {
reactRouter: reactRouterParameters({
location: {
pathParams: { userId: '42' },
searchParams: { tab: 'activityLog' },
state: { fromPage: 'homePage' },
},
routing: {
path: '/users/:userId',
handle: 'Profile',
},
}),
},
};
To wrap all your project's stories inside a router by adding the decorator in your preview.js
file.
// .storybook/preview.js
export default {
decorators: [withRouter],
parameters: {
reactRouter: reactRouterParameters({ ... }),
}
} satisfies Preview;
To specify anything related to the browser location, use the location
property.
type LocationParameters = {
path?: string | ((inferredPath: string, pathParams: Record<string, string>) => string | undefined);
pathParams?: PathParams;
searchParams?: ConstructorParameters<typeof URLSearchParams>[0];
hash?: string;
state?: unknown;
};
If location.path
is not provided, the browser pathname will be generated using the joined path
s from the routing
property and the pathParams
.
You can provide a function to path
.
It will receive the joined path
s from the routing property and the pathParams
as parameters.
If the function returns a string
, is will be used as is. It's up to you to call generatePath
from react-router
if you need to.
If the function returns undefined
, it will fallback to the default behavior, just like if you didn't provide any value for location.path
.
You can set routing
to anything accepted by createBrowserRouter
.
To make your life easier, storybook-addon-remix-react-router
comes with some routing helpers :
export const MyStory = {
parameters: {
reactRouter: reactRouterParameters({
routing: reactRouterOutlet(<MyOutlet />),
}),
},
};
The following helpers are available out of the box :
reactRouterOutlet(); // Render a single outlet
reactRouterOutlets(); // Render multiple outlets
reactRouterNestedOutlets(); // Render multiple outlets nested one into another
reactRouterNestedAncestors(); // Render the story as an outlet of nested outlets
You can also create your own helper and use the exported type RoutingHelper
to assist you :
import { RoutingHelper } from 'storybook-addon-remix-react-router';
const myCustomHelper: RoutingHelper = () => {
// Routing creation logic
};
RouterRoute
is basically the native RouteObject
from react-router
; augmented with { useStoryElement?: boolean }
.
If you want to accept a JSX and turn it into a RouterRoute
, you can use the exported function castRouterRoute
.
Just set { useStoryElement: true }
in the routing config object.
Navigation events, loader and actions are logged, for you to better understand the lifecycle of your components.
This package aims to support Storybook > 7
and React > 16
.
Here is a compatibility table :
Addon | React | Storybook | React Router |
---|---|---|---|
4.x | >= 16.8.0 | 8.x | 7.x |
3.x | >= 16.8.0 | 8.x | 6.x 1 |
2.x | >= 16.8.0 < 19.0.0 | 7.x | 6.x |
1.x | >= 16.8.0 < 19.0.0 | 7.x | 6.x |
1 You can actually use react-router v7 if you import from react-router-dom
and not react-router
.
If you have an issue with any version, open an issue.
Contributions are welcome.
Before writing any code, file an issue to showcase the bug or the use case for the feature you want to see in this addon.
This package is released under the Apache 2.0 license.
FAQs
Use Remix React Router in your stories. (Formerly storybook-addon-react-router-v6)
The npm package storybook-addon-remix-react-router receives a total of 55,588 weekly downloads. As such, storybook-addon-remix-react-router popularity was classified as popular.
We found that storybook-addon-remix-react-router demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
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
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
Research
Security News
Socket researchers uncover the risks of a malicious Python package targeting Discord developers.
Security News
The UK is proposing a bold ban on ransomware payments by public entities to disrupt cybercrime, protect critical services, and lead global cybersecurity efforts.