You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nuxt3中API请求时点击Logo跳转首页后自动回退问题

问题分析与解决方案

核心原因

当你快速点击Logo返回首页时,hotel-search页面的onMounted钩子中仍有异步代码在后台执行(比如路由跳转、API请求后的URL更新操作),这些操作在页面卸载后继续完成,从而触发不必要的路由重定向,将页面拉回hotel-search。

具体修复步骤

1. 页面卸载时终止所有异步操作

在hotel-search.vue中添加onUnmounted钩子,终止API请求的AbortController并重置相关状态,防止后续代码执行:

import { onUnmounted, useRoute } from 'vue';
// 将abortController提升到组件作用域,避免onMounted内重复创建
const abortController = new AbortController();
const route = useRoute();

onUnmounted(() => {
  // 终止未完成的API请求
  abortController.abort();
  // 重置响应式状态,避免残留数据干扰其他页面
  initialRequestHappened.value = false;
  sid.value = '';
  dck.value = '';
  // 清理EventBus监听
  EventBus.off('showLoading');
});

2. 避免不必要的路由重复跳转

修改onMounted中的router.push逻辑,先判断当前路由是否已经是/hotel-search,避免重复触发跳转:

onMounted(async () => {
  EventBus.off('*')
  // 移除sleep(1),固定延迟会打乱异步时序
  EventBus.emit("showLoading", {});
  
  if(search.value.dck || search.value.sid) {
    if(search.value.sid) delete search.value['sid']
    if(search.value.dck) delete search.value['dck']
    query.value = await api.makeQueryString(search.value);
    search.value = api.decodeQueryString(query.value);
    
    // 仅当前路由不是hotel-search时执行跳转
    if (route.path !== '/hotel-search') {
      await router.push(`/hotel-search?${query.value}`);
    }
  } 
  await getDataForward();
});

3. 防止API请求完成后触发已卸载页面的路由操作

在addSidAndDckToURL函数中,先检查当前路由是否仍为/hotel-search,再执行路由更新:

const addSidAndDckToURL = async () => {
  // 页面已跳转则终止后续操作
  if (route.path !== '/hotel-search') return;
  
  // 原有URL更新逻辑
  const updatedQuery = { ...route.query, sid: sid.value, dck: dck.value };
  await router.push({ path: '/hotel-search', query: updatedQuery });
};

4. 替换固定延迟为DOM更新等待

如果需要等待DOM渲染完成,用nextTick替代sleep(1),避免时序错误:

import { nextTick } from 'vue';

onMounted(async () => {
  EventBus.off('*')
  await nextTick(); // 等待DOM更新完成
  EventBus.emit("showLoading", {});
  
  // 后续逻辑...
});

额外排查点

  • 检查首页是否监听了EventBus事件或全局状态变化,导致自动触发搜索重定向。
  • 确认localStorage中是否存储了搜索相关状态,若首页加载时会读取这些状态并跳转,需在返回首页时清除对应存储。

内容的提问来源于stack exchange,提问作者Amir Arain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 03:44:52