将道具传递给组件,React Router V4

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将道具传递给组件,React Router V4相关的知识,希望对你有一定的参考价值。

我有一个这个组件树的应用程序:

App
   Header
   Main
     Searcher
     List_of_albums
       Album

所以,我的想法是在主页面上有一个专辑搜索者,这会在搜索后显示一个专辑列表。为此,我正在组件Main中读取.json文件,然后将props传递给List_of_albums和Album。

到目前为止,一切正常。

现在我想通过一个按钮访问新路线中每个相册的信息:/ id_of_the_album。

此按钮本地化在组件相册中,如下所示:

let albumLink = `/${this.props.id}`
<Link to={albumLink}></Link>

为此,我在组件App中尝试了这个:

import { BrowserRouter as Router, Route, Switch } from 'react-router-dom'

class App extends Component {
  constructor(){
  super()
  }

  render () {
   return (
     <Router>
      <Fragment>
       <Header />
        <Switch>
          <Route exact path='/' render={() => {
           return(
             <Main />
            )
          }} />

         <Route path='/:id_of_the_album' render={() => {
           return(
             <Profile />
           )
          }} />
          </Switch>
        </Fragment>
      </Router>
    )
  }
}

其中个人资料是显示相册详细信息的新组件。在这个新的组件中,我想用这样的东西打开各个专辑的jsons:

import singlejson from '../data/""""herethe_id_of_the_album"""".json'

但是如何将组件配置文件传递给id_of_the_album?

答案

写这样:

<Route path='/:id_of_the_album' render={props => <Profile {...props} /> } />

现在在Profile组件中,它应该可以通过:

this.props.match.params.id_of_the_album

另一答案

在react路由器中,当您从一个组件路由到另一个组件时,您将拥有一个对象match,其中包含许多属性。其中一个是params,它可以帮助我们识别是否有任何参数通过路径传递给子组件。

在您的情况下,您可以在您的子组件中使用match.params.id_of_the_album

This link提供有关反应路由器的更多信息。

以上是关于将道具传递给组件,React Router V4的主要内容,如果未能解决你的问题,请参考以下文章

在 react-router v4 中将自定义道具传递给路由器组件

如何将道具传递给 react-router 1.0 组件?

React-Router-Dom v5.2 ,无法从父级收到的道具中将道具传递给子组件

使用 react-router v4 将 props 传递给子组件

如何使用链接(react-router)将道具从一个页面传递到类组件

页面未呈现;在 react-router-dom 中使用受保护的路由将道具传递给孩子时