【发布时间】:2021-03-03 13:44:07
【问题描述】:
我有一个 react 组件,它从路由中获取 id 并使用它来加载一些数据并填充 redux 状态。
我正在使用来自“react-router”的useParams 来执行此操作。
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
我有一个故事
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({})
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
代码在站点中实际运行时一切正常,但在故事中运行时,useParams 的路径中没有 :id 可供选择。
现在我将跳过这个故事,只测试Display 组件,但我的完美主义者要求知道如何让它工作。
【问题讨论】:
标签: reactjs redux react-router storybook