router.onErrorr 造成路由出错的情况,一般都是白屏

造成 路由 出错的情况:

1、跳转路由页面加载该页面js文件 404时,触发router.onError
 场景

 

原因:

解决:
 

router.onError((error, to, from) => {
  // vue-router 在跳路由加载对应页面js文件失败时,错误信息是 Loading .. failed
  const pattern = /Loading .*failed/g
  if (pattern.test(error)) {
     // 这里可以提示一小段时间,然后刷新页面解决
        window.location.reload() // 刷新后重新请求main.js,这时记录的chunk.js则是服务器最新文件,再次跳路由时则正确请求文件

2、vue-router 跳转 vue页面时,此vue文件出现了阻塞性错误
比如:

.vue 页面一开始就出现语法错误:

<template>

 </template>

<script>

const a = {}

console.log(a.a.toString()) // 阻塞性错误
 

表现为:

1、页面空白

2、路由重定向到 /  (根路由)

<think>好的,我现在需要回答用户关于hash路由router.push的区别,以及如何监听路由变化的问题。首先,我得确认用户提到的框架是Vue还是React,因为两者的实现方式不同。用户同时提到了vue-router和react-router,所以可能需要分别解释。 首先,关于hash路由router.push的区别。Hash路由是URL中以#号开头的那部分,常用于前端路由,不会导致页面刷新。而router.push是编程式导航的方法,用于切换路由。需要明确两者的定义和工作原理。 接下来是监听路由变化的实现方式。在Vue中,通常使用vue-router的全局守卫或组件内的守卫,比如beforeEach。而在React中,react-router可能使用useEffect钩子来监听路由变化。需要分框架说明,并给出示例代码。 然后,要确保回答符合用户的要求:结构清晰,分步骤解释,语法正确,引用相关引用内容。用户提供的引用中,引用[2]和[4]提到了vue-router和react-router的区别,可能需要引用这些内容来支持回答。 需要注意用户提到的引用中的具体内容,比如vue-router使用<router-view>,而react-router使用组件方式配置,这些可以作为区别的一部分。同时,关于路由传参和路由守卫的部分可能涉及监听路由变化的方法,比如在React中使用useEffect监听location变化。 现在需要组织内容,先解释hash路由router.push的区别,再分别说明在Vue和React中如何监听路由变化。确保每个部分都有明确的步骤和示例代码,同时正确引用提供的资料。 可能还需要检查是否有遗漏点,比如hash模式与history模式的区别是否相关,但用户主要问的是hash路由router.push的区别,所以需要明确区分这两个概念。router.push是导航方法,而hash路由是URL的一种模式,两者属于不同层面的概念,但可能在使用上有交集。 最后,生成相关问题,确保问题与主题相关,帮助用户进一步学习。</think>### 一、hash路由router.push的区别 #### 1. **hash路由的本质** - **URL结构**:通过`#`符号定义路由片段(如`http://example.com/#/home`),浏览器不会向服务器发送`#`后的内容请求[^2]。 - **特点**:无需后端配置,适合纯前端应用;通过监听`hashchange`事件实现路由切换[^4]。 #### 2. **router.push的作用** - **编程式导航**:通过代码主动触发路由跳转(如`router.push('/home')`),在vue-router和react-router中均为核心API[^1]。 - **兼容性**:在hash模式下,`router.push`会修改`#`后的路径;在history模式下,会修改完整URL路径。 #### 3. **核心区别** | 特性 | hash路由 | router.push | |----------------|--------------------------|---------------------------| | 触发方式 | 用户手动修改URL或链接跳转 | 代码主动调用API | | 页面刷新行为 | 不会触发页面刷新 | 在history模式下可能触发刷新 | | 适用场景 | 无服务器配置的单页应用 | 所有路由模式的导航需求 | --- ### 二、监听路由变化的实现方式 #### 1. **vue-router实现** - **全局前置守卫**: ```javascript const router = new VueRouter({ /* ... */ }); router.beforeEach((to, from, next) => { console.log('路由从', from.path, '跳转到', to.path); next(); // 必须调用next()继续导航 }); ``` - **组件内监听**: ```javascript export default { watch: { '$route'(to, from) { console.log('路由变化:', to.path); } } } ``` #### 2. **react-router实现** - **使用`useEffect`钩子**(React函数组件): ```javascript import { useLocation } from 'react-router-dom'; function App() { const location = useLocation(); useEffect(() => { console.log('路由变化:', location.pathname); }, [location]); return <div>{/* 内容 */}</div>; } ``` - **类组件监听**: ```javascript import { withRouter } from 'react-router-dom'; class MyComponent extends React.Component { componentDidUpdate(prevProps) { if (this.props.location !== prevProps.location) { console.log('路由变化:', this.props.location.pathname); } } } export default withRouter(MyComponent); ``` --- ### 三、关键引用说明 1. **路由模式差异**:vue-router通过全局配置定义路由规则,而react-router支持JSX组件化配置[^4]。 2. **路由守卫**:vue-router提供完整的导航守卫体系(如`beforeEach`),react-router需依赖生命周期或Hook手动实现。 --- §§ 1. hash模式与history模式在SEO优化上有何差异? 2. 如何通过router.push实现带参数的动态路由跳转? 3. 在vue-router中如何取消正在进行的路由导航? 4. react-router的`useNavigate`和`useHistory`有何区别?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值