首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

第二十一篇:从 React-Router 切入,系统学习前端路由解决方案

注:没有使用过 React-Router 的同学,可以点击这里完成快速上手。 1....li> li> // 具体的标签用 Link 包裹 Dashboard ); export default BasicExample; 这个 Demo 渲染出的页面效果如下图所示: 当我点击不同的链接时...比如当我点击“About”链接时,就会展示 About 组件的内容,效果如下图所示:  注意,点击 About 后,界面中发生变化的地方有两处(见下图标红处),除了 ul 元素的内容改变了之外,路由信息也改变了...举个例子,比如这样的一个 URL: https://www.imooc.com/ 我就可以通过增加和改变哈希值,来让这个 URL 变得有那么一点点不一样: // 主页 https://www.imooc.com

49710
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Vue Router详细教程

    上面的这种操作,就是后端路由。当我们页面中需要请求不同的路径内容时,交给服务器来进行处理,服务器渲染好整个页面,并且将页面返回给客户顿。...改变URL,但是页面不进行整体的刷新。如何实现呢? 2.前端路由的规则 2.1URL的hash URL的hash,URL的hash也就是锚点(#), 本质上是改变window.kk属性。...在路由切换时, 切换的是挂载的组件, 其他内容不会发生改变。...但是我们的实现中, 默认没有显示首页组件, 必须让用户点击才可以。如何可以让路径默认跳到到首页, 并且渲染首页组件呢?非常简单, 我们只需要多配置一个映射就可以了。...4.2HTML5的History模式 我们前面说过改变路径的方式有两种:URL的hash,HTML5的history默认情况下, 路径的改变使用的URL的hash。

    3.7K30

    前端路由的原理及应用

    前端路由的起源 传统的web开发中,并没有前端路由这个概念。那么前端路由是如何出现的呢? 早期的路由都是后端来实现的,根据用户访问的地址的不同,浏览器从服务器请求对应的资源或页面展示给用户。...单页面顾名思义就是一个网站只有一个html页面,但是点击不同的导航显示不同的内容,对应的url也会发生变化。也就是通过JS实时检测url的变化,从而改变显示的内容。SPA可以说是ajax的进阶版了。...主要有两种方法: 1.设置a标签的href属性为一个hash值,当点击a标签时会在当前的url后面增加上hash值,同时触发'hashchange'事件;2.直接在js中对location.hash进行更改...我们给window绑定监听事件,监听hashchange事件,当url中的hash值改变时,刷新页面展示对应的内容。...当我们点击a标签时,window监听到url的hash改变,触发refresh方法,根据获取到的currentURl,执行routes对象中对应的route视图函数: <div id="index-page

    2.3K20

    【前端路由】实现一个 hash、history 路由,改善页面渲染体验

    路由的概念来源于服务端,在服务端中路由描述的是 URL 与处理函数之间的映射关系。...在 Web 前端单页应用 SPA(Single Page Application)中,路由描述的是 URL 与 UI 之间的映射关系,这种映射是单向的,即 URL 变化引起 UI 更新(无需刷新页面)。...通过hashchange事件监听URL变化,改变URL的方式: 通过浏览器前进后退改变URL 通过标签改变URL 通过window.locatioin改变URL history:提供pushState...或标签改变URL时不会触发popstate事件 可以通过拦截pushState/replaceState的调用和标签的点击事件来检测URL是否发生变化 实现方式(1):hash ...,需要多判断a标签点击事件并拦截。

    23430

    令人惊叹的前端路由原理解析和实现方式

    的变化,改变 URL 的方式只有这几种:通过浏览器前进后退改变 URL、通过标签改变 URL、通过window.location改变URL,这几种情况改变 URL 都会触发 hashchange 事件...事件的 popstate 事件,但 popstate 事件有些不同:通过浏览器前进后退改变 URL 时会触发 popstate 事件,通过pushState/replaceState或标签改变 URL...好在我们可以拦截 pushState/replaceState的调用和标签的点击事件来检测 URL 变化,所以监听 URL 变化可以实现,只是没有 hashchange 那么方便。...  routerView = document.querySelector('#routeView')   onPopState()   // 拦截  标签点击事件默认行为, 点击时使用 pushState...修改 URL并更新手动 UI,从而实现点击链接更新 URL 和 UI 的效果。

    1.6K30

    前端路由原理解析和实现

    ,改变 URL 的方式只有这几种:通过浏览器前进后退改变 URL、通过 标签改变 URL、通过 window.location改变 URL,这几种情况改变 URL都会触发 hashchange 事件...事件的 popstate事件,但 popstate 事件有些不同:通过浏览器前进后退改变 URL 时会触发 popstate 事件,通过 pushState/replaceState或 标签改变...好在我们可以拦截 pushState/replaceState的调用和 标签的点击事件来检测 URL 变化,所以监听 URL 变化可以实现,只是没有 hashchange 那么方便。...= document.querySelector('#routeView') onPopState() // 拦截 标签点击事件默认行为, 点击时使用 pushState 修改 URL并更新手动...UI,从而实现点击链接更新 URL 和 UI 的效果。

    99320

    手写Vue-router核心原理,再也不怕面试官问我Vue-router原理

    2.如何实现前端路由? 要实现前端路由,需要解决两个核心: 如何改变 URL 却不引起页面刷新? 如何检测 URL 变化了?...的变化,改变 URL 的方式只有这几种: 通过浏览器前进后退改变 URL 通过标签改变 URL 通过window.location改变URL history 实现 history 提供了 pushState...好在我们可以拦截 pushState/replaceState的调用和标签的点击事件来检测 URL 变化 通过js 调用history的back,go,forward方法课触发该事件 所以监听 URL...这里需要注意的就是,当改变path值时,默认会触发页面的跳转,所以需要拦截 标签点击事件默认行为, 点击时使用 pushState 修改 URL并更新手动 UI,从而实现点击链接更新 URL 和...$slots.default) } }) 我们把router-link渲染成a标签,当然这时最简单的做法。 通过点击a标签就可以实现url上路径的切换。

    7.1K63

    手把手写一个Vue-router,无惧面试官的vueRoute题目

    ,改变 URL 的方式只有这几种:通过浏览器前进后退改变 URL通过标签改变 URL通过window.location改变URLhistory 实现history 提供了 pushState 和...:通过浏览器前进后退改变 URL 时会触发 popstate 事件通过pushState/replaceState或标签改变 URL 不会触发 popstate 事件。...好在我们可以拦截 pushState/replaceState的调用和标签的点击事件来检测 URL 变化通过js 调用history的back,go,forward方法课触发该事件所以监听 URL...这里需要注意的就是,当改变path值时,默认会触发页面的跳转,所以需要拦截 标签点击事件默认行为, 点击时使用 pushState 修改 URL并更新手动 UI,从而实现点击链接更新 URL 和...$slots.default) }})我们把router-link渲染成a标签,当然这时最简单的做法。通过点击a标签就可以实现url上路径的切换。

    61120

    前端成神之路-vue路由

    1.路由的概念 路由的本质就是一种对应关系,比如说我们在url地址中输入我们要访问的url地址之后,浏览器要去请求这个url地址对应的资源。...(比如点击页面中的菜单或者按钮改变URL的hash值,根据hash值的变化来控制组件的切换) 核心实现依靠一个事件,即监听hash值变化的事件 window.onhashchange = function...="#/keji">科技 财经 娱乐 当我们点击这些超链接的时候,就会改变url地址中的hash值,当...hash值被改变时,就会触发onhashchange事件 在触发onhashchange事件的时候,我们根据hash值来让不同的组件进行显示: window.onhashchange = function...A.嵌套路由的概念(★★★) 当我们进行路由的时候显示的组件中还有新的子级路由链接以及内容。

    78620

    ajax使用案例

    追加标签用反引号,标签里用服务器返回的数据,使用${}接收变量,${}不用引起来             }; }, 这样就出来了: 当我点击python,这里显示Python的内容 当我点击云计算...一个路由的不同,改变了页面的不同。 再比如看下面路飞网页: 这个url,又叫接口: 当我点击免费课的时候,能看到免费课的课程。...1处这张表和2处这张表是有关联的,点击1表的一行数据Python 2处显示python相关的一张表的数据(我的理解是这里1处的每个li标签数据对应一个表;也可以是所有li标签对应2处的1个表,但是这张表有...所以插入的li标签比如开发者工具,要将这个api返回的数据中的id数作为开发者工具这个li的一个属性记录下来。点击事件反生时就根据获取到的id属性值,来显示另一个表中相同这个外键id的数据表内容。...因为创建li标签还没有从后端拿到数据创建出来,下面的点击事件就已经生成了。所以相当于没绑定。自己做不了的事情,交给其它人去做,事件委托,事件代理。

    11.6K20

    Vue学习-Vue router

    前言 本文将介绍Vue-router的使用。 ---- Vue-router 前端路由 前端路由的核心就是改变URL,但是页面不进行整体的刷新。...hash模式 URL的hash也就是锚点(#), 本质上是改变window.location的href属性,但是可以通过直接赋值location.hash来改变href, 但是页面不发生刷新。...这里建立一个带路由的项目,启动服务,在控制台输入location.hash = 'xxx'来改变URL: history模式 history接口有5种模式改变URL而不刷新页面。...:用于关联路由组件,利用to属性 标签:用于展示路由模板,运行时会自动渲染为标签,并用router模板对其替换 效果如下: 路由的默认路径 如果想在最初进入页面时就加载一个默认路由...重新返回该路由时不会重新创建 由上图可以看出标签产生了作用,但是这里有一个问题: 在跳转user(用户)之前的首页是处于home/message(消息)子路由的,然而重新回到首页之后又自动换为了默认的

    4.5K20

    彻底理清前端单页面应用(SPA)的实现原理

    单页面应用所谓路由跳转,其实最终结果就是: 浏览器的url地址发生变化,但是其实并没有发送请求...,也没有刷新整个页面 根据我们配置的路由信息,每次点击切换路由,会切换到不同的组件显示,类似于选项卡功能的实现,但是同时url地址栏会变化 分为HashRouter和BrowserRouter两种模式...模式路由就做好了,剩下的就是路由嵌套,以及错误边界的处理 History模式实现: History来自Html5的规范 History模式,url地址栏的改变并不会触发任何事件 History模式...对于一个应用而言,url 的改变(不包括 hash 值得改变)只能由下面三种情况引起: 点击浏览器的前进或后退按钮 点击 a 标签 在 JS 代码中触发 history.push(replace)State...另外绑定 popstate 事件,当用户点击前进或者后退的按钮时候,能够及时更新视图,另外当刚进去页面时也要触发一次视图更新。

    3.1K41

    React Router源码浅析

    其实react-router-dom是基于react-router再封装的一个带有React DOM组件的库,其中包括了Link、HashRouter、BrowserRouter等组件提供给开发者通过使用标签的方式控制路由跳转...返回null 否 返回null 当我们的路由发生变化时,Router中所监听的history函数将会触发,返回新的location对象,这是将会触发Router的setState,然后对应所有绑定Router...Switch组件 如果我们只是单纯的使用Route组件来设置路由,当我们的当前的url满足多条路由规则的情况下,会出现多个Route的子组件进行渲染,这个时候如果当我们使用Switch包裹多个Route...参数,将交由浏览器处理) 触发内部点击事件,使用history库实例后的push或replace来控制前端路由跳转 禁止默认事件 以下是Link组件的点击处理逻辑: Link组件是如何获取到history...的那,我们使用的时候并没有传递进去当前的history实例呀,实际上还记得之前看Route组件的时候,在return的时候,又包裹了一层Context吗,其实实际上就是给Link这类型的标签方便获取到history

    1.1K20

    17. vue-route详细介绍

    这个是谁来定位的呢?就是前端路由来定位, 在vue中前端路由就是vue-router. 前端路由的核心是什么呢? 改变url, 但是页面不进行整体刷新. 二. 前端如何实现页面跳转但是不刷新?...如上图, 我们可以通过location.hash="链接"的方式来修改url,但是并不刷新页面 2. history 除了使用hash,我们还可以使用history来改变实现改变url但不刷新页面的方法...如上图所示: 当我们执行history.pushState({a:1},null,"about");的时候, 浏览器并没有刷新页面(Network没有请求), 但是url链接确实发生了变化 history.replaceState...如上图, 当我们使用history.back()命令的时候, 会回退到上一个页面, 也并没有发生更新....: 会根据当前的路径, 动态渲染组件的内容 网页的其他内容, 例如:顶部的标题/导航,底部的版权信息等和/处于一个等级 在切换路由时, 切换的是挂在组建的内容, 其他不会发生改变

    5.5K20

    我所知道的 vue-router

    a 标签经常做的事;a 的标签用 href 属性来指定导航的目标地址,而 组件则用 to 属性来定目标地址; : 是路由的出口,路由匹配到的组件将...的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载。...当切换到新路由时,我想要想要页面滚到顶部!!! 当切换到新路由时,保持原先的滚动位置!!!! 当切换到新路由时,我想随意定位!!!! 这时候该怎么办???...,当我们切换路由的时候,希望某些属性也跟着路由变化;例如 这时候我们就可以用 watch 来监听路由,当路由发生变化时,相对于的样式也跟着显示或隐藏;这只是一个很简单的例子 ...路由是一个难点也是重点,在我接触的 node.js 中,也会遇到路由的跳转。弄明白了这里的路由跳转,那其他地方也没有什么其他太大的问题啦,毕竟语言是相通的。

    24520

    ReactRouter的实现

    history模式仍然是需要后端的配置支持,用以支持非首页的请求以及刷新时后端返回的资源,由于应用是个单页客户端应用,如果后台没有正确的配置,当用户在浏览器直接访问URL时就会返回404,所以需要在服务端增加一个覆盖所有情况的候选资源...Link这个标签了,所以我们再来看一下组件,我们可以看到Link最终还是创建一个a标签来包裹住要跳转的元素,在这个a标签的handleClick点击事件中会preventDefault禁止默认的跳转...,所以实际上这里的href并没有实际的作用,但仍然可以标示出要跳转到的页面的URL并且有更好的html语义。...在handleClick中,对没有被preventDefault、鼠标左键点击的、非_blank跳转的、没有按住其他功能键的单击进行preventDefault,然后push进history中,这也是前面讲过的路由的变化与...页面的跳转是不互相关联的,ReactRouter在Link中通过history库的push调用了HTML5 history的pushState,但是这仅仅会让路由变化,其他什么都没有改变。

    1.4K10

    Vue 选手转 React 常犯的 10 个错误,你犯过几个?

    但是,它并不起作用!当我们输入一个项目并提交表单时,该项目没有被添加到购物清单中。 问题就在于我们违反了也许是 React 中最核心的原则 —— 不可变状态。...React依靠一个状态变量的地址来判断状态是否发生了变化。当我们把一个项目推入一个数组时,我们并没有改变该数组的地址,所以 React 无法判断该值已经改变。...比如: 控制台就会报警告: 每当我们渲染一个元素数组时,我们需要向React提供一些额外的上下文,以便它能够识别每一个项目,通常就是需要一个唯一的标识符。...li> 像这样在 JSX 中生成它将导致 key 在每次渲染时都会改变。...例如,这里是我从服务器获取数据时创建唯一ID的方法: async function retrieveData() { const res = await fetch('/api/data');

    23610
    领券