jsd*_*v17 37 hyperlink reactjs react-router
问题:如何通过React-Router的Link组件传递prop或单个值(如_id),并在端点捕获它?
这就是我的意思:假设我们在页面/ a上.链接将用户带到/ b.就这样<Link to='/b'>
.现在,我需要通过链接传递_id,从/ a到/ b.
<Link to='/b' params={_id}>blah blah</Link>
Run Code Online (Sandbox Code Playgroud)
我想要传递的id是Link组件嵌套在其中的对象的属性.
我params={}
在另一个StackOverflow线程中找到了这种语法.我的代码编译没有破坏,所以这可能意味着它工作?但是,我不确定如何在端点处检索此传递的值.
任何帮助将不胜感激.
Mig*_*ota 101
传递道具
您可以通过state
对象将任意道具传递给路线:
<Link to={{ pathname: '/route', state: { foo: 'bar'} }}>My route</Link>
Run Code Online (Sandbox Code Playgroud)
然后,您可以state
从组件中访问该对象:
const {foo} = props.location.state
console.log(foo) // "bar"
Run Code Online (Sandbox Code Playgroud)
传递参数
配置路由路径以接受命名参数(:id
):
<Route path='/route/:id' exact component={MyComponent} />
Run Code Online (Sandbox Code Playgroud)
然后,您可以在链接中传递ID等URL参数to
:
<Link to={`route/foo`}>My route</Link>
Run Code Online (Sandbox Code Playgroud)
您可以通过match
对象访问组件中的参数:
const {id} = props.match.params
console.log(id) // "foo"
Run Code Online (Sandbox Code Playgroud)
来源
https://github.com/ReactTraining/react-router/blob/master/packages/react-router/docs/api/location.md
小智 7
要通过链接组件传递数据,您可能只想接受实际链接上的参数.
<Link to={`/b/${_id}`}>blah blah</Link>
Run Code Online (Sandbox Code Playgroud)
在路线中,你会设置这样的东西
<Route path="b/:id" name="routename" component={foo}></Route>
然后,您可以通过新路径访问参数 this.props.match.params.id
如果你真的不希望你的id在实际路线中,它会变得更加烦人.
小智 6
如果您使用的是反应钩子,您可以使用useLocation获取从状态对象传递的参数
<Link to={{ pathname: `page/${id}`, state: { foo: 'bar'} }}>Click me</Link>
<Route
exact
path={`page/:id`}
component={BComponent}
/>
Run Code Online (Sandbox Code Playgroud)
const BComponent = (props) => {
const location = useLocation();
console.log(location.state.foo);
return ()
}
Run Code Online (Sandbox Code Playgroud)
小智 5
如果你想通过一个路由发送多个参数,你可以这样做。
1.链接元素
<Link to={`/exchangeClicked/${variable1} ,${variable2},${variable3}`} >Click
</Link>
Run Code Online (Sandbox Code Playgroud)
2.配置您的路由路径以接受这些参数
<Route
exact
path="/exchangeClicked/:variable1,:variable2,:variable3"
component={MyComponent}
/>
Run Code Online (Sandbox Code Playgroud)
3.然后您可以通过以下方式访问新路线中的参数,
<Typography variant="h4" color="inherit">
Exchange:{this.props.match.params.variable1}
</Typography>
<Typography variant="Body 1" color="inherit">
Type:{this.props.match.params.variable2}
</Typography>
<Typography variant="Body 1" color="inherit">
Durabiliy:{this.props.match.params.variable3}
</Typography>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
43979 次 |
最近记录: |