我正在使用MobX @observer和@withRouter(react-router-v4)包装页面组件,例如这样
@withRouter
@inject('stores')
@observer
class Page extends Component {
render() {
return (
<div>
<NavBar />
<Header title={this.props.stores.UIStore.title} />
<Switch>
<Route exact path="/" component={HomePage} />
<Route exact path="/about" component={AboutPage} />
<Route component={NotFound} />
</Switch>
</div>
)
}
问题更改路线位置时,始终使用相同的道具重新渲染NavBar和Header组件(不更新任何状态)。当更改路线时,react-perf显示许多浪费的渲染(没有道具/状态更新)。
[NavBar包含链接和某些MobX状态(仅使用@ observer + @ inject进行的NavBar包装)标头只是一个无状态的组件。
页面组件需要@withRouter导致@observer(MobX)中断react-router(https://github.com/mobxjs/mobx-react/issues/210)的原因
如何防止NavBar和Header的路线位置更改而重新渲染?仅当mobx状态更新时才允许重新渲染。
我知道这已经很老了,但这就是我在项目中解决相同问题的方式: