在React Router中传递其他参数

时间:2016-02-16 11:25:27

标签: reactjs react-router

如何将其他参数传递给我要转换到的组件。

我的routes.js如下。我已经为authorList声明了两个路径,为了特定作者的详细信息宣布了另一个路径。

var routes = (
    <Route path="/" component={require('./components/main')}>        
        <Route path="authors" component={require('./components/authors/authorPage')}/>
        <Route path="authors/:authorId" component={require('./components/authors/AuthorDetails')}/>
    </Route>
);

module.exports = routes;

在我的authorList页面中,有如下功能。

showAuthorDetails(authorId) {            

    var myExtraParams = { key1 : val1, key2 : val2};
    hashHistory.push(`/authors/${authorId});     
}

现在在我的AuthorDetail页面中,我可以通过

获得authorId
this.props.params.authorId

但我也希望将myExtraParams作为对象传递,但不想在url中声明并传递它。 我想以某种方式在新组件中访问myExtraParams,或许可以这样说来做

this.props.params.myExtraParams

应该给mt这个对象。 (就像使用stateParams在Angular UI路由器中发生的那样)

我该怎么做?

2 个答案:

答案 0 :(得分:2)

您可以尝试更改路线的结构:

var routes = (
    <Route path="/" component={require('./components/main')}>        
        <Route path="authors" component={require('./components/authors/authorPage')}>
            <Route path="author/:authorId" component={require('./components/authors/AuthorDetails')}/>
        </Route>
    </Route>
);

然后在你的authorList页面你可以做

...
renderAuth() {
    if (this.props.children === null) {
        return(
            ....your default authorList
        )
    } else {
        return React.cloneElement(this.props.children || <div />, {myExtraParams: myExtraParams});
    }
}

render() {
    <div>
        {this.renderAuth()}
    </div>
}

showAuthorDetails(authorId) {            
    hashHistory.push(`/authors/author/${authorId});     
}
...

然后您应该能够在authorsDetail页面中访问this.props.myExtraParams

答案 1 :(得分:1)

我正在看这个问题。也许我迟到了,你已经有了解决方案但是如果没有,那么你可以通过

来做到这一点

router.push({
  pathname: '/some-route',
  search: '?param=123',
  state: {
    additionalParam: 'value',
  },
})}

在接收组件方面,您将获得

this.props.location.state.additionalParam

我希望它有所帮助。如有任何进一步的帮助,请随时告诉我。

由于