Vue router-view key 导致路由切换非router-view部分也进行刷新

发布时间 2023-07-02 13:13:52作者: 微风L

<router-view> 组件是一个 functional 组件,渲染路径匹配到的视图组件。<router-view> 渲染的组件还可以内嵌自己的 <router-view>,根据嵌套路径,渲染嵌套组件。

 

如果中最外层的<router-view>中增加了:key="$route.fullPath", 会导致子路由中的router-view之外的部分也会被重新渲染,key值的使用应该考虑不干扰其他组件渲染的前提下去添加,例如header组件

// 这个是根路由,下面有包含header的子路有,每次切换路由,header都会被同步刷新
<transition name="fade">
  <router-view :key="$route.fullPath" /> 
</transition>
// 子路由
<Header />
<router-view />

 

key值添加是为了以下几点

1. 不设置 router-view 的 key 属性由于 Vue 会复⽤相同组件,即 /page/a => /page/b 或者 /page?id=a => /page?id=b 这类链接跳转时,将不再执⾏ created , mounted 之类的钩⼦,这时候你需要在路由组件中,添加beforeRouteUpdate 钩⼦来执⾏相关⽅法拉取数据。

2. 设置 router-view 的 key 属性值为 $route.path从 /page/a => /page/b ,由于这两个路由的 $route.path 并不⼀样,所以组件被强制不复⽤,相关钩⼦加载顺序为 beforeRouteUpdate => created => mounted

3. 设置 router-view 的 key 属性值为 $route.fullPath从 /page/a => /page/a ,由于这两个路由的 $route.fullPath 并不⼀样,所以组件被强制不复⽤,相关钩⼦加载顺序为beforeRouteUpdate => created => mounted

4. 从 /page?id=a => /page?id=b ,由于这两个路由的 $route.fullPath 并不⼀样,所以组件被强制不复⽤。