【发布时间】:2018-06-05 15:54:05
【问题描述】:
我试图更好地理解为什么每当 React Router v5 中的路由发生变化时我的所有组件都会重新渲染。请注意,这些组件只是重新渲染而不是重新安装。当我在开发工具中打开 react 扩展并选中 Highlight Updates 复选框时,我可以看到我的所有组件在更改路由时都被勾勒出来,即使是比路由匹配更高级别的组件:
<Router>
<MyHeader />
<ComponentWithRoutes />
</Router>
在这个简单的示例中,我希望更改路由不会重新渲染MyHeader 组件,因为没有任何变化。但是,我仍然会看到开发工具的亮点。我认为这是意料之中的,因为文档中的所有示例都表现出相同的行为。
我的问题有两个。 1) 使MyHeader 之类的组件重新渲染的实际原因是什么?似乎没有任何道具或状态正在改变。是因为路由器使用上下文 API 的方式吗?路由器正在渲染并导致孩子重新渲染? 2)为什么这不被认为是浪费?看起来即使实际 DOM 没有改变,React 仍然必须通过虚拟 DOM 中的协调步骤。就这么快就无所谓了吗?当您开始拥有大量嵌套组件时会发生什么?
【问题讨论】:
-
> 被认为是浪费你怎么知道该组件需要重新渲染? :)
-
在我阅读了您最初的标题后,我实际上去检查他们是否发布了我不知道的 v5 :)
-
@fabio.sussetto 抱歉,试图尽早赶上那个编辑。 ;)
标签: javascript reactjs react-router-v4