从indexRoute更改为包含路径':topic'的路线时,页面保持不变。
我的路线看起来像这样:
ReactDOM.render(
<Provider store={store}>
<Router history={browserHistory}>
<Route path='/' addHandlerKey={true} component={App}>
<IndexRoute component={ArticleList} />
<Route path='/:topic' component={ArticleList} />
<Route path='/:id' component={Article} />
</Route>
</Router>
</Provider>, document.getElementById('app'));
ArticleList看起来像这样:
const _ArticleList = React.createClass({
componentWillMount () {
this.props.fetchArticles();
},
render () {
return (
<div id='ArticleList' className='box'>
{this.props.articles.map(function (article, i) {
return <ArticleCard id={article._id} key={i} title={article.title} votes={article.votes} />;
})}
</div>
);
}
当我导航到路线然后刷新页面时,它会更改为我想要的,而不是直接导航到它。
要清楚,url正在改变(感谢App组件)所以params.topic正在改变,但组件没有重新渲染,因此componentWillMount没有被触发。 (尝试过componentWillReceiveProps,但这不起作用)
答案 0 :(得分:3)
您遇到的问题是,一旦索引页面已加载,组件将已安装并且不会卸载,除非您一起更改为完全不同的路径。您只是更新了一条不会重新触发componentWillMount
以再次启动的子路线。
您需要重温componentWillReceiveProps
,因为这是执行此操作的正确方法。
类似的东西:
componentWillReceiveProps(nextProps) {
// in our own app we have acces to routeParams as the :id portion not sure if that works on your app
// but idea should be if the topic has changed then refetch the articles
if (this.props.routeParams !== nextProps.routeParams) {
this.props.fetchArticles();
}
}
答案 1 :(得分:0)
当我尝试使用conponentWillMount()
时,我注意到了同样的行为 - 这是componentWillMount()
的拼写错误。
拼写错误没有触发任何警告或错误,当然也没有触发我打算调用的事件。