在 React-Router 中使用 Link 传递props

IT技术 javascript reactjs ecmascript-6 react-router
2021-04-24 18:45:17

您好,我正在尝试通过DetailsReact Router 的 Link 组件将 Props 传递给一个组件。我不想Detail在页面上显示组件,它应该在单击按钮时呈现,而且当新组件呈现时,url 应该看起来像这样“/details/KvhNJecsqr6JFMSRTS”。

 class  Card extends Component {
                    render(props){
                    return(
                   <Col xs={12} md={4}>
                    <Thumbnail src="./someiamge">
                      <h3>{this.props.cardHeading}</h3>
                      <p>{this.props.cardDesc}</p>
                        <Button bsStyle="primary">Mieten</Button>&nbsp;
                        <Button bsStyle="default"><Link to='/details' params={{cardId: this.props.cardId}} 'here i wanna pass some props how i do this ?' >Details</Link></Button>
                    </Thumbnail>
                  </Col>

                    )
                  }
                }

export default Card

这是我的路由器的东西

<BrowserRouter>
          <div>
              <Route name='details' path='/details/:cardId' component={Details}/>
            </div>
          </div>
</BrowserRouter>

hier 是我的Details组件:

    class Details extends Component {
      render() {
        return (
          <div >
            <div style={{textAlign: "left"}}>
              <h3>{this.props.cardHeading}</h3>
              <p>{this.props.cardDesc}</p>
              .......
            </div>
          </div>
        );
      }
    }

    export default Details;
2个回答

如果想让你的新路线像 /details/:cardId 一样,那么我想这应该足够了:

<Link to={`/details/${this.props.cardId}`} />

但是,如果您想添加一些额外的属性,那么根据文档,您可以将它们传递给location.state

<Link to={{
  pathname: `/details/${this.props.cardId}`,
  state: { 
    cardHeading: 'This is a heading',
    cardDesc: 'Description'
  }
}}/>

然后,为了在您的组件中访问此状态,您可以使用this.props.location.statethis.props.history.location.state

在您的链接代码中,我相信应该是这样的:

<Link to={{ pathname: '/details', query: { cardId: this.props.cardId } }}/>

路线将与您目前拥有的路线相同。