我很难理解在这里设计路由。例如 -
array.map((each)=>(
<Link to="details/${each.id}"> <Card props={each}/> </Link>
))
通过点击这些卡片,详细页面的骨架将打开,但我将如何将与卡片相关的一些数据传递到新页面?我想将一些api 数据发送到与每张卡片相关的新页面,或者在切换到该新组件页面后传递一些信息以调用与该卡片相关的 api。
我很难理解在这里设计路由。例如 -
array.map((each)=>(
<Link to="details/${each.id}"> <Card props={each}/> </Link>
))
通过点击这些卡片,详细页面的骨架将打开,但我将如何将与卡片相关的一些数据传递到新页面?我想将一些api 数据发送到与每张卡片相关的新页面,或者在切换到该新组件页面后传递一些信息以调用与该卡片相关的 api。
您可以使用Link
's to object将状态与路由转换一起发送。
反对
可以具有以下任何属性的对象:
- 路径名:表示要链接到的路径的字符串。
- 搜索:查询参数的字符串表示。
- hash:放在 URL 中的散列,例如#a-hash。
- 状态:坚持到该位置的状态。<-- 你需要这个
array.map((each)=>(
<Link
to={{
pathname: `details/${each.id}`,
state: {
// whatever you need to send with the route transition
},
}}
>
<Card props={each}/>
</Link>
))
你有几个选择。
现在在功能组件中使用useLocation React 钩子的最简单和更常见的方法。
const { state } = useLocation();
使用withRouter高阶组件装饰组件并注入路由props。
如果您的组件用withRouter
它装饰,则会将当前路由props作为props注入。
export default withRouter(EachComponent);
state
从location
props访问。
const { state } = this.props.location;
由Route
组件直接渲染并接收路由 props。
如果您的组件直接由 a 呈现,Route
则路由props将传递给它。
<Route path="/details/:id" component={EachComponent} />
state
从location
props访问。
const { state } = this.props.location;
注意:路由状态是瞬态的,这意味着它只存在于从一个路由到下一个路由的转换过程中。如果您直接导航到接收路由,它将没有状态,因为它没有使用提供状态的路由的转换。
您可以使用位置状态或搜索(或查询参数)通过链接传递数据:
<Link
to={{
pathname: '/path/to/my/component',
search: 'id=123&name=foo',
state: { data: 111 },
}}
>
Click Me
</Link>
并在MyComponent
(例如钩子)中检索:
const location = useLocation()
const query = new URLSearchParams(location.search)
console.log(location.state)
console.log(query.get('id'))
console.log(query.get('name'))
PS:您还可以制作自定义钩子 -useQuery
用于查询参数。
但请注意,如果您/path/to/my/component
直接在浏览器中手动输入路径打开路径,则不会有位置状态或查询参数。
并且Internet Explorer 不支持URLSearchParams,如果您还需要支持 IE,可以使用诸如query-string 之类的包。