web前端面试高频考点——Vue3.x升级的重要功能(emits属性、生命周期、多事件、Fragment、移出.async、异步组件写法、移出 filter、Teleport、Suspense...)

简介: web前端面试高频考点——Vue3.x升级的重要功能(emits属性、生命周期、多事件、Fragment、移出.async、异步组件写法、移出 filter、Teleport、Suspense...)

一、三连问(为什么)

1、为什么需要用 ref ?

  • 返回值类型,会丢失响应式
  • 如在 setup、computed、合成函数,都有可能返回值类型
  • Vue 如不定义 ref,用户将自造 ref,反而混乱

whyRef.vue 组件

  • 值类型无处不在
  • vue3 是通过 proxy 实现的响应式,但只对引用类型(数组,对象)有效
  • 为使得值类型也实现响应式,ref 便出现了
<template>
  <p>why ref demo {{ state.age }} - {{ age1 }}</p>
</template>
<script>
import { toRefs, reactive, computed } from "vue";
function useFeatureX() {
  const state = reactive({
    x: 1,
    y: 2,
  });
  return toRefs(state);
}
export default {
  name: "whyRef",
  setup() {
    const { x, y } = useFeatureX();
    const state = reactive({
      age: 20,
      name: "杂货铺",
    });
    const age1 = computed(() => {
      return state.age + 1;
    });
    setTimeout(() => {
      console.log(x.value, y.value);
      state.age = 25;
    }, 1000);
    return {
      state,
      age1,
    };
  },
};
</script>

3cf65d03e7d94e73bba9ca6a2f021fe4.pngb720c072c7c84b82a6ea16dad758f452.png

2、为何需要 .value ?

  • ref 是一个对象(不丢失响应式),value 存储值
  • 通过 .value 属性的 get 和 set 实现响应式
  • 用于模板、reactive 时,不需要 .value,其他情况都需要

5c49f0a4d6c94f7290b174c3a5e40726.png

3、为什么需要 toRef 和 toRefs

  • 初衷:不丢失响应式的情况下,把对象数据 分散/扩展(解构)
  • 前提:针对的是响应式对象(reactive 封装的)非普通对象
  • 注意:不创造 响应式,而是 延续 响应式

二、Vue3 升级了哪些重要的功能

1、createApp

vue2.x 对比 vue3.0

// vue2.x
const app = new Vue({...})
// vue3
const app = Vue.createApp({...})

vue2.x 使用对比 vue3.0

// vue2.x
Vue.use(...)
Vue.mixin(...)
Vue.component(...)
Vue.directive(...)
// vue3
app.use(...)
app.mixin(...)
app.component(...)
app.directive(...)

2、emits 属性

App.vue 父组件

  • 父组件的子组件标签绑定 onSayHello 自定义事件
  • info,是子给父要传递的参数
  • 注意绑定的时候必须是 @onXxx 的格式,更容易识别出是监听事件(规则)
<template>
    <HelloWorld @onSayHello="sayHello" />
</template>
<script>
import HelloWorld from "./components/HelloWorld.vue";
export default {
  methods: {
    sayHello(info) {
      console.log('hello', info);
    }
  },
  components: { HelloWorld },
};
</script>

HelloWorld.vue 子组件

  • setup里面传两个参数
  • 第一个参数 props,获取属性
  • 第二个参数是一个对象,对象解构之后是 emit 属性
  • 之后通过 emit 调用自定义事件,后面用来传参
<template>
  <p>emits 的使用</p>
</template>
<script>
export default {
    name: 'HelloWorld',
    emits: ['onSayHello'],
    setup(props, { emit }) {
        emit('onSayHello', 'vue3')
    }
};
</script>

9412ca4c636e43f9bc7fcc64ca62f9fe.png

3、生命周期

参照上一篇文章

4、多事件

在 methods 里定义 one two 两个函数

<button @click="one($event), two($event)">Submit</button>

5、Fragment 组件模板

vue2.x 组件模板:多个 html 标签 必须包裹 起来

<template>
  <div>
    <h3>Hello Vue3</h3>
    <p>前端杂货铺</p>
  </div>
</template>

vue3.x 组件模板:不需要包裹

<template>
    <h3>Hello Vue3</h3>
    <p>前端杂货铺</p>
</template>

6、移除 .async

async 可以实现父子组件数据之间的双向绑定,与 v-model 类似

在 Vue2 中一个组件上只能有一个 v-model,而 .sync 修饰符可以有很多个

// vue2.x
<MyComponent v-bind:title.sync="title" />
// vue3.x
<MyComponent v-model:tilte="title">

7、异步组件的写法

Vue2.x 写法

new Vue({
  components: {
    'my-component': () => import('./xxx.vue')
  }
})

Vue 3.x 写法

import { createApp, defineAsyncComponent } from 'vue'
createApp({
    components: {
        AsyncComponent: defineAsyncComponent(() => 
            import('./components/AsyncComponent.vue')
        )
    }
})

8、移除 filter

以下 filter 在 vue3 中不可用

{{ message | capitalize}}
<div v-bind:id="rawId | formatId"></div>

9、Teleport

详细参考链接

  • 是一种能够将我们的组件 html 结构移动到指定位置的技术
  • data 中设置 modalOpen: false
<button @click="modalOpen = true">
    打开全屏模式(使用 teleport)
</button>
<teleport to="body">
    <div v-if="modalOpen" class="modal">
        <div>
            telePort 弹窗(父元素是 body)
            <button @click="modalOpen = false">关闭弹窗</button>
        </div>
    </div>
</teleport>

5571045c96184373beedb0749ca36bad.png

10、Suspense

详细参考链接

  • 等待异步组件时渲染一些额外内容,让应用有更好的用户体验
<Suspense>
  <Test1 /> <!-- 是一个异步组件 -->
  <!-- #fallback 就是一个具名插槽
      即 Suspense 组件内部,有两个 slot,
      其中一个具名为 falllback -->
  <template #fallback>
      Loading...
  </template>
</Suspense>

11、Composition API

  • reactive
  • ref 相关
  • readonly
  • watch 和 watchEffect
  • setup
  • 生命周期钩子函数

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

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


相关文章
|
10月前
|
JavaScript 前端开发 Java
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
933 1
|
11月前
|
移动开发 前端开发 JavaScript
Vue与React两大前端框架的主要差异点
以上就是Vue和React的主要差异点,希望对你有所帮助。在选择使用哪一个框架时,需要根据项目的具体需求和团队的技术栈来决定。
598 83
|
12月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
614 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
11月前
|
存储 前端开发 JavaScript
调用DeepSeek API增强版纯前端实现方案,支持文件上传和内容解析功能
本方案基于DeepSeek API增强版,提供纯前端实现的文件上传与内容解析功能。通过HTML和JavaScript,用户可选择文件并调用API完成上传及解析操作。方案支持多种文件格式(如PDF、TXT、DOCX),具备简化架构、提高响应速度和增强安全性等优势。示例代码展示了文件上传、内容解析及结果展示的完整流程,适合快速构建高效Web应用。开发者可根据需求扩展功能,满足多样化场景要求。
3220 64
|
10月前
|
JavaScript 前端开发 编译器
Vue与TypeScript:如何实现更强大的前端开发
Vue.js 以其简洁的语法和灵活的架构在前端开发中广受欢迎,而 TypeScript 作为一种静态类型语言,为 JavaScript 提供了强大的类型系统和编译时检查。将 Vue.js 与 TypeScript 结合使用,不仅可以提升代码的可维护性和可扩展性,还能减少运行时错误,提高开发效率。本文将介绍如何在 Vue.js 项目中使用 TypeScript,并通过一些代码示例展示其强大功能。
424 22
|
12月前
|
人工智能 JavaScript 前端开发
Vue 性能革命:揭秘前端优化的终极技巧;Vue优化技巧,解决Vue项目卡顿问题
Vue在处理少量数据和有限dom的情况下技术已经非常成熟了,但现在随着AI时代的到来,海量数据场景会越来越多,Vue优化技巧也是必备技能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
JavaScript 前端开发 搜索推荐
Vue的数据驱动视图与其他前端框架的数据驱动方式有何不同?
总的来说,Vue 的数据驱动视图在诸多方面展现出独特的优势,其与其他前端框架的数据驱动方式的不同之处主要体现在绑定方式、性能表现、触发机制、组件化结合、灵活性、语法表达以及与后端数据交互等方面。这些差异使得 Vue 在前端开发领域具有独特的地位和价值。
305 58
|
JavaScript 前端开发 jenkins
抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目
本文探讨了在不依赖Node和VSCode的情况下,仅使用记事本和浏览器开发一个完整的Vue3前端项目的方法。通过CDN引入Vue、Vue Router、Element-UI等库,直接编写HTML文件实现页面功能,展示了前端开发的本质是生成HTML。虽然日常开发离不开现代工具,但掌握这种基础方法有助于快速实现想法或应对特殊环境限制。文章还介绍了如何用Node简单部署HTML文件到服务器,提供了一种高效、轻量的开发思路。
341 10
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
1263 14
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
487 0

热门文章

最新文章