Dav*_*Sag 6 reactjs react-router redux storybook
我有一个反应组件,它id从路由中获取一个并使用它来加载一些数据并填充 redux 状态。
我正在使用useParams'react-router'来做到这一点。
import { useParams } from 'react-router'
import { usePreload } from './hooks'
import Display from './Display'
const Overview = () => {
const { id } = useParams()
const { data } = usePreload(id) // uses useEffect to preload the data with the given id
return <Display data={data} />
}
export default Overview
Run Code Online (Sandbox Code Playgroud)
我有故事
import Overview from './Overview'
import preloadData from './decorators/preloadData'
export default {
title: 'Redux/scenes/Overview',
decorators: [preloadData()],
component: Overview,
argTypes: {}
}
const Template = args => <Overview {...args} />
export const Default = Template.bind({})
Run Code Online (Sandbox Code Playgroud)
该preloadData装饰很简单
import { usePreload } from '../hooks'
import { data } from './fixtures'
const Loaded = ({ children }) => {
useSubmissionsPreload(data.id) // loads the site data into the state
return <>{children}</>
}
const preloadData = () => Story => (
<Loaded>
<Story />
</Loaded>
)
export default preloadData
Run Code Online (Sandbox Code Playgroud)
代码在站点中实际运行时一切正常,但在故事中运行时,没有:id路径可供useParams选择。
现在我将跳过这个故事,只测试Display组件,但我的完成者要求知道如何让它工作。
小智 10
我也遇到了这个问题,De2ev 的评论为我指明了正确的方向。然而它并不能直接工作,我必须做一些小小的改变。最后它与以下代码一起工作:
import React from "react";
import { Meta } from "@storybook/react";
import MyComponent from "./MyComponent";
import { MemoryRouter, Route} from "react-router-dom";
export default {
title: "My Title",
component: MyComponent,
decorators: [(Story) => (
<MemoryRouter initialEntries={["/path/58270ae9-c0ce-42e9-b0f6-f1e6fd924cf7"]}>
<Route path="/path/:myId">
<Story />
</Route>
</MemoryRouter>)],
} as Meta;
export const Default = () => <MyComponent />;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
747 次 |
| 最近记录: |