web前端面试高频考点——Vue的高级特性(动态组件、异步加载、keep-alive、mixin、Vuex、Vue-Router)

news2025/1/21 12:07:28

系列文章目录

内容参考链接
Vue基本使用Vue的基本使用(一文掌握Vue最基础的知识点)
Vue通信和高级特性Vue组件间的通信及高级特性(多种组件间的通信、自定义v-model、nextTick、插槽)
Vue高级特性Vue的高级特性(动态组件、异步加载、keep-alive、mixin、Vuex、Vue-Router)
Vue原理1Vue原理(理解MVVM模型、深度/监听data变化、监听数组变化、深入了解虚拟DOM)
Vue原理2Vue原理(diff算法、模板编译、组件渲染和更新、JS实现路由)
Vue面试题web前端面试高频考点——Vue面试题

文章目录

  • 系列文章目录
    • 一、Vue高级特性
      • 1、动态组件
      • 2、vue异步加载组件
      • 3、vue缓存组件(keep-alive)
      • 4、mixin
    • 二、Vuex
      • 1、Vuex基本概念
      • 2、用于Vue组件
    • 三、Vue-router
      • 1、动态路由
      • 2、懒加载


一、Vue高级特性

1、动态组件

  • 按未知顺序渲染组件

图片出处:https://coding.imooc.com/lesson/419.html#mid=33846

在这里插入图片描述
示例:动态组件的使用

index.vue 父组件

  • 在 data 中接收组件名
  • <component> 中通过 :is="xxx" 绑定组件
<template>
  <div>
    <p>vue 高级特性-动态组件</p>
    <hr />

    <component :is="NextTick"></component>
  </div>
</template>

<script>
import NextTick from "./NextTick.vue";
export default {
  components: { NextTick },
  data() {
    return {
      NextTick
    };
  },
};
</script>

在这里插入图片描述

示例:动态渲染多个组件

index.vue 父组件

<template>
  <div>
    <p>vue 高级特性-动态组件</p>
    <hr />

    <div v-for="(val, key) in newsData" :key="key">
      <component :is="val.type"></component>
    </div>
  </div>
</template>

<script>
import myText from './myText'
import myImage from './myImage'
export default {
  components: {
    myText,
    myImage
  },
  data() {
    return {
      newsData: {
        1: {
          type: 'myText'
        },
        2: {
          type: 'myImage'
        }
      }
    };
  },
};
</script>

myText 子组件

<template>
  <div>
    <p>我是 myText 组件</p>
    ---------------------
  </div>
</template>

myImage 子组件

<template>
  <div>
    <p>我是 myImage 组件</p>
    <img src="xxx">
  </div>
</template>

在这里插入图片描述

2、vue异步加载组件

  • import() 函数
  • 按需加载,异步加载大组件

示例:异步加载组件(按需加载,用的时候才加载)

index.vue 父组件

  • components 里面按需引入组件
<template>
  <div>
    <my-image v-if="showImage" />
    <button @click="showImage = true">点我显示</button>
  </div>
</template>

<script>
export default {
  components: {
    myImage: () => import("./myImage"),
  },
  data() {
    return {
      showImage: false,
    };
  },
};
</script>

myImage.vue 子组件

<template>
  <div>
    <p>我是 myImage 组件</p>
    <img src="xxx">
  </div>
</template>

在这里插入图片描述

3、vue缓存组件(keep-alive)

  • 缓存组件
  • 频繁切换,不需要重复渲染
  • Vue性能优化的一种方法

示例:keep-alive 实例,切换其他组件当前组件不会被销毁

KeepAlive.vue 父组件

  • 导入 A,B,C 三个子组件
  • 点击按钮显示对应组件的内容
<template>
  <div>
    <button @click="changeState('A')">A</button>
    <button @click="changeState('B')">B</button>
    <button @click="changeState('C')">C</button>

    <keep-alive>
      <keep-alive-state-a v-if="state === 'A'"></keep-alive-state-a>
      <keep-alive-state-b v-if="state === 'B'"></keep-alive-state-b>
      <keep-alive-state-c v-if="state === 'C'"></keep-alive-state-c>
    </keep-alive>
  </div>
</template>

<script>
import KeepAliveStateA from "./KeepAliveStateA.vue";
import KeepAliveStateB from "./KeepAliveStateB.vue";
import KeepAliveStateC from "./KeepAliveStateC.vue";
export default {
  components: {
    KeepAliveStateA,
    KeepAliveStateB,
    KeepAliveStateC,
  },
  data() {
    return {
      state: "A",
    };
  },
  methods: {
    changeState(state) {
      this.state = state;
    },
  },
};
</script>

KeepAliveStateA.vue 子组件

<template>
  <div>
    <p>state A</p>
  </div>
</template>

<script>
export default {
  mounted() {
    console.log("A mounted");
  },
  destroyed() {
    console.log("A destroyed");
  },
};
</script>

KeepAliveStateB.vue 子组件

<template>
  <div>
    <p>state B</p>
  </div>
</template>

<script>
export default {
  mounted() {
    console.log("B mounted");
  },
  destroyed() {
    console.log("B destroyed");
  },
};
</script>

KeepAliveStateC.vue 子组件

<template>
  <div>
    <p>state C</p>
  </div>
</template>

<script>
export default {
  mounted() {
    console.log("C mounted");
  },
  destroyed() {
    console.log("C destroyed");
  },
};
</script>

在这里插入图片描述

在这里插入图片描述

4、mixin

  • 多个组件有相同的逻辑,抽离出来
  • mixin 并不是完美的解决方案,会有一些问题
  • Vue3 提出的 Composition API 旨在解决这些问题

mixin 的一些问题

(1)变量来源不明确,不利于阅读
(2)多个 mixin 可能会造成命名冲突
(3)mixin 和组件可能出现多对多的关系,复杂度较高

示例:使用 mixin

MixinDemo.vue 组件

  • 首先导入 mixin.js 文件
  • mixins: [xxx] 使用它
<template>
  <div>
    <p>{{ name }} {{ major }} {{ city }}</p>
    <button @click="showName">显示姓名</button>
  </div>
</template>

<script>
import myMixin from "./mixin";
export default {
  mixins: [myMixin],
  data() {
    return {
      name: "杂货铺",
      major: "web 前端",
    };
  },
  mounted() {
    console.log("component mounted", this.name);
  },
};
</script>

mixin.js 文件

  • mixin.js 里面的值和方法,可以在引用它的组件里直接使用
export default {
  data() {
    return {
      city: "北京",
    };
  },
  methods: {
    showName() {
      console.log("点击显示名字:", this.name);
    },
  },
  mounted() {
    console.log("mixin mounted", this.name);
  },
};

在这里插入图片描述

二、Vuex

1、Vuex基本概念

Vuex基本概念参考链接

  • state
  • getters
  • action
  • mutation

2、用于Vue组件

用于Vue组件的Vuex参考链接

  • dispatch
  • commit
  • mapState
  • mapGetters
  • mapActions
  • mapMutations
    在这里插入图片描述

三、Vue-router

Vue-router 使用参考链接

  • 路由模式(hash、H5 history)
  • 路由配置(动态路由、懒加载)
  • hash 模式(默认),如 http://abc.com/#/user/10(一般选择 hash 模式)
  • H5 history 模式(默认),如 http://abc.com/user/10(需要 server 端支持)

1、动态路由

const User = {
    // 获取参数,如 10 20
    template: '<div>User {{ $router.params.id }} </div>'
}
const router = new VueRouter({
    routes: [
        // 动态路径参数 以冒号开头。能命中 `/user/10` `/user/20` 等格式的路由
        {path: '/user/:id', component: User}
    ]
})

2、懒加载

  • 按需引入,实现懒加载
export default new VueRouter({
  routes: [
    {
      path: '/',
      component: () => import('./components/xxx')
    }
  ]
})

不积跬步无以至千里 不积小流无以成江海

点个关注不迷路,持续更新中…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/408561.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue 进阶系列丨大文件切片上传

Vue 进阶系列教程将在本号持续发布&#xff0c;一起查漏补缺学个痛快&#xff01;若您有遇到其它相关问题&#xff0c;非常欢迎在评论中留言讨论&#xff0c;达到帮助更多人的目的。若感本文对您有所帮助请点个赞吧&#xff01;2013年7月28日&#xff0c;尤雨溪第一次在 GItHub…

Layui的基本使用(前端登录操作步骤)

目录 一.介绍layui 二.Layui相关的基本操作 1.下载Layui网站 &#xff1a;Layui - 经典开源模块化前端 UI 框架 ----------接下来的操作是实现一个Layui前端登录的效果------------- 2.创建项目 3.使用mybatis plus自动生成代码 (1).导入依赖 (2).导入生成类 (3).运行…

vscode+live server——更改端口号——基础积累

最近在写前台&#xff0c;通过jq写的&#xff0c;之前我一直嚷嚷jq基础薄弱&#xff0c;现在练手的来了。。。。 运行页面的时候&#xff0c;可以使用live server 1.vscode软件中安装live server 2.在html页面右击&#xff0c;有个open with live server 3.电脑默认的浏览器会…

Vue3中使用hooks,hooks究竟是个啥?如何理解

1.前言 最近被hooks这个词老是被提出&#xff0c;我经常听到但是又不会用&#xff0c;于是乎抽时间认真学习一下。 2.vue3 hooks 2.1 为什么vue3 可以使用hooks 因为vue2由选项式Api转为组合式Api。底层源码改了好多。 组合式API的好处&#xff1b; 就是在函数内可以使用声…

使用pynecone开发python web应用

环境•windows 10 64bit•python 3.8.15•pynecone 0.1.14简介Pynecone 是一个基于纯 python 的用于开发 web app 的开源框架&#xff0c;它依赖于 nodejs&#xff0c;不过不需要另外编写前端代码&#xff0c;这对于没有接触过前端的朋友是非常友好的。安装第一步&#xff0c;安…

Vue项目常见的错误以及解决办法

错误分类 vue项目中遇到的问题大体上分为两类&#xff1a;一类是基础的语法错误&#xff0c;另一类就是其它错误 这里简单分享以下我在项目中遇到的错误和解决办法&#xff0c;如果你也有&#xff0c;希望对你会有帮助 GET http://dida100.com:8888/api/cart 401 (Unauthoriz…

【前端修炼场】 — HTML常用的标志语言

此文为【前端修炼场】第三篇&#xff0c;上一篇文章链接&#xff1a;上一篇 文章目录前言标志语言基本结构介绍声明介绍标签修饰编码形式常用HTML标签标题标签段落标签换行标识水平线标识加粗标识倾斜标识删除线标识下划线标识上标 / 下标标识总结前言 之前我们使用过的那些标…

React 面向组件编程(上)

目录前言&#xff1a;一、组件的基本理解和使用1. 函数式组件2. 类式组件3. 注意事项4. 渲染函数式组件标签的基本流程5. 渲染类组件标签的基本流程二、组件三大核心属性 1&#xff1a;state1. 代码示例2. 效果展示3. 注意4. 设置状态:setState三、 组件三大核心属性 2&#xf…

小程序问题:封装公共组件的onLoad方法不生效

素材编辑 | 宋大狮 排版运营 | 小唐狮 ONE 问题描述 因为许久没有接触小程序项目&#xff0c;今天在做小程序项目时&#xff0c;为了节省时间&#xff0c;将要修改的页面组件直接拿出来封装成了公共组件&#xff0c;同时也没多想就直接使用了。于是就出现了页面数据不能加载的…

模板字符串基本使用

模板字符串是ES6添加的一个新的字符串编写形式。 1.【模板字符串】之拼接 在ES6之前&#xff0c;如果我们想要将字符串和一些动态的变量拼接到一起&#xff0c;是很麻烦的。 const name "aaa" const age 18console.log("my name is "name".Im &q…

三个案例掌握this.$nextTick()方法的使用/Vue中的$nextTick()

this.$nextTick() 解释为在下次DOM更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法&#xff0c;获取更新后的DOM. 也就是说&#xff0c;当dom元素发生改变&#xff0c;重新渲染dom树后&#xff0c;再执行vue.$nextTick()里面的内容。 其实用方法一般为 this.$n…

讲讲vue3下会造成响应式丢失的情况

题引&#xff1a; 在我们从vue2过渡到vue3的时候&#xff0c;对于数据响应式的变化其实是懵懵懂懂的。从以往直接在data函数里面定义变量到每一次都要使用ref/reactive时&#xff0c;是有些不适应的。但问题不大&#xff0c;毕竟在大前端时代中&#xff0c;如果不及时跟上时代…

TS中快速定义一个对象数组以及处理async await的异常

定义一个对象数组&#xff08;即数组成员为对象&#xff0c;对象的属性为我们所约束&#xff09; 方法一&#xff1a;接口字面量形式 export type Resource {_id: string,personID: {_id: stringage: stringidentifier: stringname: stringnation: stringgrade: stringscheme…

contentEditable属性

前言 我们最常用的输入文本内容便是input与textarea&#xff0c;但是有一个属性&#xff0c;可以让我们在很多标签中&#xff0c;如div,table,p,span,body等&#xff0c;可以像input输入框一样&#xff0c;实现文本编辑&#xff0c;这便是contentEditable属性 contentEditabl…

【vue2】近期bug收集与整理01

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;记录博主在vue2中遇到过的坑&#xff0c;本文是博主的学习使用总结 目录 1登陆token的问…

【学姐面试宝典】前端基础篇Ⅴ——JS深浅拷贝、箭头函数、事件监听等

前言 博主主页&#x1f449;&#x1f3fb;蜡笔雏田学代码 专栏链接&#x1f449;&#x1f3fb;【前端面试专栏】 今天继续学习前端面试题相关的知识&#xff01; 感兴趣的小伙伴一起来看看吧~&#x1f91e; 文章目录什么是事件监听事件委托以及冒泡原理介绍一下 promise&#x…

uniapp 小程序嵌套H5开发总结

项目需求是在uniapp小程序项目中嵌套H5页面&#xff0c;H5返回小程序需要传值给小程序进行通信。 好,百度一查确实可以实现 用的uniapp提供的web-view&#xff08;https://uniapp.dcloud.io/component/web-view.html#web-view经验证实&#xff0c;做功能之前先看官网&#xff…

一天时间迅速准备前端面试|JavaScript——异步进阶

&#x1f308;本系列文章是博主精心整理的面试热点问题&#xff0c;吸收了大量的技术博客与面试文章&#xff0c;总结多年的面试经历&#xff0c;带你快速建立前端面试知识体系。抓住每一场面试的机会&#xff0c;知己知彼才能百战百胜&#xff01; 上期回顾 JS基础–异步 本系…

【中秋快乐】如何用three.js实现我的太空遐想3D网页

目录 创作背景 功能分解 创建3d地球 创建3d月球 创建3d小火箭

解决element-ui动态加载级联选择器默认选中问题(Cascader)

前言 最近在开发任务中碰到需要在新增和修改时使用动态加载级联选择器&#xff0c;但是当在修改时设置默认选中项&#xff0c;出现了后端数据返回较慢&#xff0c;导致无法选中和级联框选中了但input框不显示的问题&#xff0c;网上找到的方法也不是很有效&#xff0c;还得使用…