首页 > 其他分享 >Vue和React路由原理

Vue和React路由原理

时间:2023-01-07 23:45:51浏览次数:32  
标签:Vue return routerView innerHTML React hashchange addEventListener 路由

hash

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <ul>
        <!-- 定义路由 -->
        <li><a href="#/home">home</a></li>
        <li><a href="#/about">about</a></li>

        <!-- 渲染路由对应的 UI -->
        <div id="routeView"></div>
    </ul>
    <script>
        // 页面加载完不会触发 hashchange,这里主动触发一次 hashchange 事件
        window.addEventListener('DOMContentLoaded', onHashChange)
        // 监听路由变化
        window.addEventListener('hashchange', onHashChange)

        // 路由视图
        let routerView = document.querySelector('#routeView')


        // 路由变化时,根据路由渲染对应 UI
        function onHashChange() {
            switch (location.hash) {
                case '#/home':
                    routerView.innerHTML = 'Home'
                    return
                case '#/about':
                    routerView.innerHTML = 'About'
                    return
                default:
                    return
            }
        }
    </script>
</body>

</html>

 

history

<html>

<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>

<body>
    <ul>
        <!-- 定义路由 -->
        <li><a href="/home">home</a></li>
        <li><a href="/about">about</a></li>
        <!-- 渲染路由对应的 UI -->
        <div id="routeView"></div>
    </ul>
</body>
<script>
    // 页面加载完不会触发 hashchange,这里主动触发一次 hashchange 事件
    window.addEventListener('DOMContentLoaded', onl oad)
    // 监听路由变化
    window.addEventListener('popstate', onPopState)

    // 路由视图
    let routerView = document.querySelector('#routeView')

    function onl oad() {

        onPopState()

        // 拦截 <a> 标签点击事件默认行为, 点击时使用 pushState 修改 URL并更新手动 UI,从而实现点击链接更新 URL 和 UI 的效果。
        let linkList = document.querySelectorAll('a[href]')
        linkList.forEach(el => el.addEventListener('click', function (e) {
            e.preventDefault()
            history.pushState(null, '', el.getAttribute('href'))
            onPopState()
        }))
    }
    // 路由变化时,根据路由渲染对应 UI
    function onPopState() {
        switch (location.pathname) {
            case '/home':
                routerView.innerHTML = 'Home'
                return
            case '/about':
                routerView.innerHTML = 'About'
                return
            default:
                return
        }
    }
</script>

</html>

 

标签:Vue,return,routerView,innerHTML,React,hashchange,addEventListener,路由
From: https://www.cnblogs.com/z-bky/p/17033878.html

相关文章

  • day04-Vue01
    Vue011.Vue是什么?Vue(读音/vju:/,类似于view)是一个前端框架,依据构建用户界面Vue的核心库只关注视图层,不仅易于上手,还便于与第三方库或者项目整合支持和其他类库结合使用......
  • Vue自定义事件原理
    自定义事件的基本用法<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width,initial-sca......
  • Flutter 陈航 21-路由 导航 Route Navigator 页面参数
    本文地址目录目录目录21|路由与导航,实现页面切换路由管理基本路由命名路由路由表routes页面PageNavigator.pushNamed页面参数启动参数返回参数总结21|路由与导航......
  • Blazor与Vue标签代码的可维护性对比
    通过一个简单示例来进行对比,Vue的ElementUI组件的行内编辑:Blazor的AntDesginBlazor组件的行内编辑:区别:el-table-column的label属性相当于Column的Title属性,这个是没......
  • 【vue】Vue-router
    Vue-router安装npminstallvue-router--save-devvue-cli中已经选择安装了vue-router,那这里不需要重复安装了解读route路径```src/router/index.js``import......
  • Vue3 中的组件 provide和inject 传值、获取组件实例的方法getCurrentInstance()
     一、 provide和inject1:在父级组件中提供数据     语法:provide('提供给子组件的变量名',提供给子组件的数据)   2:在子级组件中获取收据  ......
  • vue-router的使用
    vue-router是vue基础工具的重要组成部分。通过简单的配置路由组件映射关系,可以实现vue页面轻松跳转。 什么是前端路由它是URL地址与组件之间的对应关系,通常使用Hash地......
  • Vue中使用flv.js播放flv格式视频流
    Vue中使用flv.js播放flv格式视频流1.安装依赖npminstallflv.js--save--legacy-peer-deps2.具体代码Html部分<template> <div><videoautoplaycontrol......
  • 适合编程初学者的开源项目:小游戏2048(Vue版)
    目标为编程初学者打造入门学习项目,使用各种主流编程语言来实现。2048游戏规则一共16个单元格,初始时由2或者4构成。1、手指向一个方向滑动,所有格子会向那个方向运动。2、相......
  • 成功解决node、node-sass和sass-loader版本冲突问题、不需要降低node版本。如何在vue
    文章目录​​1、报错信息​​​​2、需要引入scss​​​​3、引入后、继续报错​​​​4、安装​​​​4.1安装node-sass​​​​4.2安装sass-loader​​​​4.3在项目中......