router.push是同步还是异步?push.then和子组件onMounted谁先触发?

文章讨论了在Vue应用中,使用`router.push`进行异步路由跳转时,`then`回调与`onMounted`钩子的执行顺序问题,提出了关于`then`在`onMounted`之后执行的疑问。
摘要由CSDN通过智能技术生成

直接做实验:

<el-button type="danger" @click="test">toAbout</el-button>

// -----

const test = () =>{
  router.push('about').then((e)=>{
    console.log('then里面', e);
  }).finally((e)=>{
    console.log('finally里面', e);
  })
  
  console.log('push下面');
}

about子组件:

<script setup>
import { ref, reactive, onMounted } from "vue";
console.log('about初始化');

onMounted(()=>{
    console.log('about onMounted');
})
</script>

可以先猜一下这 5 个 console.log 的打印顺序


结果如下:
在这里插入图片描述

有没有人知道 then 为什么会在 onMounted 之后才执行?

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`this.$router.push` 和 `this.$router.replace` 都是 Vue Router 提供的方法用于导航到新页面。它们之间的主要区别在于 URL 变更的历史记录处理以及浏览器的前进/后退按钮行为: ### `this.$router.push` 当使用 `this.$router.push` 导航时: 1. **URL 变更历史**:它会将当前路由添加到浏览器的 URL 变更历史列表中。这意味着用户可以使用浏览器的前进/后退按钮返回上一步。 2. **URL 更新**:这会导致浏览器地址栏显示新的路径,并可能触发一些服务端请求如刷新数据、加载特定内容等。 ### `this.$router.replace` 而使用 `this.$router.replace` 导航时: 1. **URL 变更历史**:它不会将当前路由添加到 URL 变更历史中。因此,浏览器的前进/后退按钮将忽略这次导航并保持在之前的页面。 2. **URL 更新**:同样地,这也会更新 URL 并可能导致服务端请求。但是,由于没有添加到历史堆栈中,这个操作对于用户来说几乎是不可见的,因为它不会留下 URL 变更的历史痕迹。 ### 应用场景示例 #### 使用 `this.$router.push` 当你希望用户可以使用浏览器的历史功能(比如点击前进或后退)时,你应该使用 `this.$router.push`。例如,在用户完成某些操作后需要导航到另一个页面并且想要保留返回选项时: ```javascript this.$router.push({ name: 'Profile', params: { userId: userId } }); ``` #### 使用 `this.$router.replace` 如果你只是想简单地刷新视图或切换组件而不影响用户的浏览历史,你可以使用 `this.$router.replace`。这常用于内部导航,尤其是当你不关心是否允许用户通过浏览器的历史回到当前页面: ```javascript this.$router.replace({ path: '/dashboard', query: { filter: 'newest' } }); ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值