我在我的React项目中使用react-routing-dom V5。 我需要通过受保护的路由将道具从App组件(我在其中导入Router)传递到子组件。 问题是道具是空的,没有匹配项,位置,历史记录。
**应用程序组件
import React, { Component } from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom'
class App extends Component {
render(){
console.log(this.props); //props does not have match propreties
return (
<div className="App">
<Router>
<React.Fragment>
<Switch>
<ProtectedRoute path='/exemple' component={Exemple}/>
</Switch>
</React.Fragment>
</Router>
);
}
}
注意:我将道具从App传递到需要使用this.props.match的子组件,但匹配未定义
答案 0 :(得分:0)
match
道具仅可用于路线的组成部分:
<Route exact path="/foo" component={({ match }) => console.log(match)} />
如果需要在App上使用它,则需要为App创建一条路由。
答案 1 :(得分:0)
尝试
import React, { Component } from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom'
class App extends Component {
render(){
console.log(this.props); //props does not have match propreties
return (
<div className="App">
<Router>
<React.Fragment>
<Switch>
<Route
path='/dashboard'
render={(props) => <Dashboard {...props} isAuthed={true} />}
/>
</Switch>
</React.Fragment>
</Router>
);
}
}
答案 2 :(得分:0)
当然,它不应该有匹配对象 匹配对象包含有关如何匹配URL的信息。 从
访问匹配对象的方式Route component as this.props.match
Route render as `({ match }) => ()`
Route children as ({ match }) => ()
`withRouter` as this.props.match
答案 3 :(得分:0)
在未路由的组件中,您应该使用:
import { useParams, useHistory } from 'react-router-dom'
const history = useHistory()
const { keyword, id, whateverTheParamIs } = useParams()