我有一个简单的路由器(从 redux-router
并切换到 react-router
消除变量)。
<Router history={history}>
<Route component={Admin} path='/admin'>
<Route component={Pages} path='pages'/>
<Route component={Posts} path='posts'/>
</Route>
</Router>
管理组件基本上就是 {this.props.children}
有一些导航;它不是 connect
ed组件。
Pages组件是一个 connect
ed组件 mapStateToProps()
像这样:
function mapStateToProps (state) {
return {
pages: state.entities.pages
};
}
帖子更有趣:
function mapStateToProps (state) {
let posts = map(state.entities.posts, post => {
return {
...post,
author: findWhere(state.entities.users, {_id: post.author})
};
}
return {
posts
};
}
然后当我加载页面或在帖子/页面路由之间切换时,我在console.log()中得到以下内容。
// react-router navigate to /posts
Admin render()
posts: map state to props
Posts render()
posts: map state to props
Posts render()
posts: map state to props
// react-router navigate to /pages
Admin render()
pages: map state to props
Pages render()
pages: map state to props
所以我的问题是:为什么 mapStateToProps
路线变化多次被叫?
另外,为什么这么简单 map
功能 mapStateToProps
导致它在Posts容器中第三次被调用?
我正在使用基本的 logger
和 crashReporter
来自Redux文档的中间件,它没有报告任何状态更改或崩溃。如果状态没有改变,为什么组件会多次渲染?