Vue3 快速掌握,了解常用新特性(适用于会 Vue2.0 开发的)(上)

简介: Vue3 快速掌握,了解常用新特性(适用于会 Vue2.0 开发的)

一、Vue3Vue2 的区别

  • 新加了组件:FragmentTeleportSuspense
  • 语法 v-on.native 修饰符被移除,不在支持。
  • Vue3template 中,不再需要唯一的根元素,如果这么使用报错可能是 ESLint 没有配置好或版本太低不支持这种写法。
<template>
  <div>123</div>
  <div>456</div>
</template>
  • 全局导入方式调整
// vue - main.js
import { createApp } from 'vue'
createApp(App).use(store).use(router).mount('#app')
// vuex
import { createStore } from 'vuex'
export default createStore({ ... })
// vue-router
import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'
const routes: Array<RouteRecordRaw> = []
export default createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes
})
...
  • Vue3 支持 Vue2 生命周期的使用
  • 生命周期对比
Vue2 Vue3 含义 区别
beforeCreate() setup() 创建前,datael 并未初始化 Vue3 中被 setup() 替代
created() setup() 创建完毕,data 数据完成初始化,el 没有 Vue3 中被 setup() 替代
beforeMount() onBeforeMount() 挂载前,datael 完成初始化
mounted() onMounted() 挂载结束,完成挂载,渲染页面
beforeUpdate() onBeforeUpdate() 更新前
updated() onUpdated() 更新完成
beforeDestroy() onBeforeUnmount() 销毁前 Vue3 中被改名
destroyed() onUnmounted() 销毁完成 Vue3 中被改名
errorCaptured() onErrorCaptured() 异常捕获
onRenderTracked() 虚拟 dom 重新渲染 Vue3 新增,只有在调试的时候有用,生产环境会忽略
onRenderTriggered() 虚拟 dom 重新渲染,输出更详细准确的数据 Vue3 新增,只有在调试的时候有用,生产环境会忽略

  • 以前自带的方法可以直接使用,现在需要通过 import 引入之后才可以进行使用
import {
  ref,
  reactive,
  onMounted,
  onUpdated,
  onUnmounted, 
  onBeforeMount, 
  onBeforeUpdate,
  onBeforeUnmount
  ...
} from 'vue'

二、setup 函数

  • setup 函数中,不能使用 thisthis 指向的是 undefined
  • setup 只会在组件初始化的时候执行一次,执行顺便对比:
beforeCreate () {
  console.log('---- beforeCreate')
},
created () {
  console.log('---- created')
},
setup () {
  console.log('---- setup')
}
// 输出顺序:
// ---- setup
// ---- beforeCreate
// ---- created
  • 参数分析
setup(props ,context) {  }
  • props 为一个对象,内部包含了父组件传递过来的所有 prop 数据。
  • context 对象包含了 attrsslotsemit属性。
  • 属性、函数的优先级、生命周期的调用先后
  • 一样的属性与函数,Vue3 的会覆盖 Vue2 的。
  • 同一个生命周期函数 Vue3 的先调用,Vue2 的后调用,不会覆盖 Vue2 的。
<template>
  <div @click="touchButton">{{ sex }}</div>
</template>
<script>
import { defineComponent, ref, onMounted } from 'vue'
export default defineComponent({
  // vue2
  data() {
    return {
      sex:'男'
    }
  },
  // vue2
  mounted () {
    console.log('mounted - vue2')
  },
  // vue3
  setup() {
    // 比 vue2 优先调用
    onMounted(() => {
      console.log('onMounted - vue3')
    })
    // 优先使用这个,会覆盖 vue2 中的 touchButton 方法
    function touchButton () {
      console.log('touchButton - vue3')
    }
    // 优先使用这个,会覆盖 vue2 中的 sex 值
    const sex = ref('女')
    return {
      sex,
      touchButton
    }
  },
  // vue2
  methods: {
    touchButton () {
      console.log('touchButton - vue2')
    }
  }
})
</script>

三、ref 函数(响应式数据 方式一)

  • setup 中使用时,要加 .value,模板中使用的时候不需要加 .value
  • 包装简单数据类型
<template>
  <!-- 模板中使用 -->
  <div @click="touchButton">{{ sex }}</div>
</template>
<script>
import { defineComponent, ref } from 'vue'
export default defineComponent({
  setup () {
    // 定义响应式属性
    const sex = ref('女')
    // 点击按钮
    function touchButton () {
      // 修改值时,需要加上 .value
      sex.value = '男'
    }
    // 定义的属性或函数需要 return 出去才会生效
    return {
      sex,
      touchButton
    }
  }
})
</script>
  • 包装复杂数据类型
<template>
  <!-- 模板中使用 -->
  <div @click="touchButton">{{ user.job.salary  }}</div>
</template>
<script>
import { defineComponent, ref } from 'vue'
export default defineComponent({
  setup () {
    // 定义响应式属性
    const user = ref({
      id: 1,
      name: 'dzm'
    })
    // 中途添加字段
    user.value.job = { salary: 10 }
    // 点击按钮
    function touchButton () {
      // 修改值时,需要加上 .value
      user.value.job.salary += 1
    }
    // 定义的属性或函数需要 return 出去才会生效
    return {
      user,
      touchButton
    }
  }
})
</script>

四、reactive 函数(响应式数据 方式二)

  • refreactive都是用来定义响应式数据的,reactive推荐去定义复杂数据类型,ref推荐定义基本类型。
  • ref 包装的简单数据(例如:number),可以被监听,可以被修改。
  • reactive 包装简单数据(例如:number),会报警告,且不能直接被修改。
  • ref 包装的复杂数据(例如:json),不可以被监听,可以新增、修改字段。
  • reactive 包装的复杂数据(例如:json),可以被监听,可以新增、修改字段。
  • 下面 十一、 中有介绍 reactiveshallowReactive 函数的使用区别。
<template>
  <!-- 模板中使用 -->
  <div @click="touchButton">{{ user.name }}</div>
</template>
<script>
import { defineComponent, reactive } from 'vue'
export default defineComponent({
  setup () {
    // 定义响应式属性
    const user = reactive({
      id: 1,
      name: 'dzm'
    })
    // 点击按钮
    function touchButton () {
      // 修改值
      user.name = 'xyq'
    }
    // 返回
    return {
      user,
      touchButton
    }
  }
})
</script>
相关文章
|
6天前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
102 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
6天前
|
资源调度 JavaScript 前端开发
Pinia 如何在 Vue 3 项目中进行安装和配置?
Pinia 如何在 Vue 3 项目中进行安装和配置?
|
2月前
|
存储 设计模式 JavaScript
Vue 组件化开发:构建高质量应用的核心
本文深入探讨了 Vue.js 组件化开发的核心概念与最佳实践。
92 1
|
2月前
|
资源调度 JavaScript 前端开发
创建vue3项目步骤以及安装第三方插件步骤【保姆级教程】
这是一篇关于创建Vue项目的详细指南,涵盖从环境搭建到项目部署的全过程。
266 1
|
3月前
|
JavaScript API 数据处理
vue3使用pinia中的actions,需要调用接口的话
通过上述步骤,您可以在Vue 3中使用Pinia和actions来管理状态并调用API接口。Pinia的简洁设计使得状态管理和异步操作更加直观和易于维护。无论是安装配置、创建Store还是在组件中使用Store,都能轻松实现高效的状态管理和数据处理。
172 3
|
4月前
|
存储 JavaScript 数据管理
除了provide/inject,Vue3中还有哪些方式可以避免v-model的循环引用?
需要注意的是,在实际开发中,应根据具体的项目需求和组件结构来选择合适的方式来避免`v-model`的循环引用。同时,要综合考虑代码的可读性、可维护性和性能等因素,以确保系统的稳定和高效运行。
134 56
|
6天前
|
JavaScript 前端开发 算法
vue渲染页面的原理
vue渲染页面的原理
|
1月前
|
JavaScript 前端开发 开发者
Vue中的class和style绑定
在 Vue 中,class 和 style 绑定是基于数据驱动视图的强大功能。通过 class 绑定,可以动态更新元素的 class 属性,支持对象和数组语法,适用于普通元素和组件。style 绑定则允许以对象或数组形式动态设置内联样式,Vue 会根据数据变化自动更新 DOM。
|
1月前
|
移动开发 JavaScript API
Vue Router 核心原理
Vue Router 是 Vue.js 的官方路由管理器,用于实现单页面应用(SPA)的路由功能。其核心原理包括路由配置、监听浏览器事件和组件渲染等。通过定义路径与组件的映射关系,Vue Router 将用户访问的路径与对应的组件关联,支持哈希和历史模式监听 URL 变化,确保页面导航时正确渲染组件。
|
1月前
|
JavaScript 前端开发 数据安全/隐私保护
Vue Router 简介
Vue Router 是 Vue.js 官方的路由管理库,用于构建单页面应用(SPA)。它将不同页面映射到对应组件,支持嵌套路由、路由参数和导航守卫等功能,简化复杂前端应用的开发。主要特性包括路由映射、嵌套路由、路由参数、导航守卫和路由懒加载,提升性能和开发效率。安装命令:`npm install vue-router`。

热门文章

最新文章