首先咱們要知道一個前提,路由傳遞的參數咱們能夠經過props裏面的屬性來獲取。只要組件是被<Router>組件的<component>定義和指派的,這個組件天然就有了props的match,history和location屬性。html
瞭解了這個,接下來咱們進入正題:編程
<Link exact to={`${match.path}/foodlist/3`} component={FondList}/> </Link> <Switch> <Route path={`${match.path}/foodlist/:id`} component={FondList}/> </Route </Switch> const FoodList = ({match})=>{ // FoodList是經過component渲染出來的,全部它有props的match屬性。 <div>FondList-{match.params.id}</div> //此時id就被渲染出來了 }
<Link exact to={`${match.path}/foodlist?id=3`} component={FondList}/> </Link>
<Switch> <Route path={`${match.path}/foodlist`} component={FondList}/> </Route </Switch> const FoodList = (props)=>{ console.log(props) //打印出來發現沒有能夠直接獲取?號後面值的方法,咱們能夠本身封裝一個方法或者使用第三方的庫。因此不建議使用?傳參 <div>FondList</div> }
經過this.props.history.push跳轉路由,經過 props.location.state獲取參數。
class FoodList extends Component{ render(){ let {match,location,history} =this.props return ( <div>foodlist={match.parmas.id}</div> <button onCLick={this.goto.bind(this)}>foodmenu</button> ) } goto(){ this.props.history.push('/food/foodmenu',{name:"kaiqin"}) //path有兩個參數,第一個是path路徑,第二個是state參數。 } } const FoodMenu =(props){ return <div>foodmenu-{props.location.state.name}</div> //經過 props.location.state獲取參數。 } <Link exact to={`${match.path}/foodlist/3`} component={FondList}/> </Link> <Switch> <Route path={`${match.path}/foodlist/:id`} component={FondList}/> </Route </Switch>