vue3 route-link跳转到其他界面还会执行当前界面 onMounted的内容,怎么才能不执行
时间: 2024-10-20 10:05:36 浏览: 30
在 Vue3 中,使用 `<router-link>` 进行导航时,当前组件的 `onMounted` 钩子函数会被重复调用。为了解决这个问题,你可以使用 `beforeRouteUpdate` 或 `beforeRouteEnter` 等路由钩子来处理逻辑。
具体来说,你可以在目标组件中使用 `beforeRouteUpdate` 钩子函数,该钩子函数会在路由更新时(例如参数变化)触发,但不会在初次加载时触发。因此,你可以将需要在 `onMounted` 中执行的逻辑移动到 `beforeRouteUpdate` 中。
以下是一个示例代码:
```javascript
<template>
<div>
<!-- Your template code here -->
</div>
</template>
<script>
import { defineComponent } from 'vue';
export default defineComponent({
name: 'YourComponent',
beforeRouteUpdate(to, from, next) {
// Put your onMounted logic here
console.log('Component is updated');
next();
},
mounted() {
// This will only run when the component is initially loaded
console.log('Component is mounted');
}
});
</script>
```
这样,当通过 `<router-link>` 跳转到其他界面时,`beforeRouteUpdate` 会负责处理你原本在 `onMounted` 中的初始化逻辑,而 `onMounted` 仅在组件初次加载时执行。
阅读全文