首页 > 其他分享 >vue3

vue3

时间:2022-11-02 21:33:18浏览次数:46  
标签:name setup let vue3 ref age

vue3

vue3介绍

1.性能的提升
打包大小减少41%
初次渲染快55%, 更新渲染快133%
内存减少54%

2.源码的升级
使用Proxy代替defineProperty实现响应式
重写虚拟DOM的实现和Tree-Shaking

3.拥抱TypeScript
Vue3可以更好的支持TypeScript

4.新的特性
-Composition API(组合API)
    setup配置
    ref与reactive
    watch与watchEffect
    provide与inject
-新的内置组件
    Fragment
    Teleport
    Suspense
-其他改变
    新的生命周期钩子
    data 选项应始终被声明为一个函数
    移除keyCode支持作为 v-on 的修饰符

5 组合式API和配置项API
-使用组合式API
-配置项API
-{
	name:'xx',
	data:function(){},
	methods:{}
}

创建vue3项目的两种方式

1.1vue-cli:创建vue2和vue3
-和vue2一样

2.vite:创建vue3,创建最新
npm init vue@latest

3.vite创建另一种方式:创建vue3.0.4版本
npm init vite-app <project-name>
-进入工程目录
cd <project-name>
-安装依赖
npm install
-运行
npm run dev
'vue3中的this不在是vue2中的vc对象,而是一个代理对象'

setup函数

1.vue3中新增的setup配置项函数
-在里面可以定义变量
-定义函数
-必须return变量和函数,在模块中才能使用

2.例子
<template>
  <h1>{{ name }}</h1>
  <h2>{{ age }}</h2>
  <button @click="handleAdd">age增加1</button>
</template>

<script>
export default {
  name: 'App',
  setup() {
    // 所有的变量定义函数编写,都写在这个函数中
    let age = 18
    let name = 'barry'

    // 定义函数
    function handleAdd() {
      // vue3中没有响应式,页面变了,变量不会变
      age = age + 1
      console.log(age)
    }

    // 函数必须有返回值
    return {age, name, handleAdd}
  },
}
</script>

ref和reactive

<template>
  <h1>{{ person.name }}</h1>
  <h2>{{ age }}</h2>
  <button @click="handleAdd">age增加1</button>
  <br>
  <button @click="handleName">点我加?</button>
  <br>
  <!--  <button @click="handleClick">点我</button>-->
</template>

<script>
import {ref, reactive} from 'vue'
// 基本数据(数字、字符串、布尔)类型如果要加响应式:使用ref包裹
// 对象、数组使用reactive
export default {
  name: 'App',
  setup() {
    let age = ref(18)
    let person = reactive({name: 'barry'})

    function handleName() {
      person.name = person.name + '?'
      console.log(person.name)
    }

    let handleAdd = () => {
      age.value = age.value + 1
      console.log(age.value)
    }
    // 函数必须有返回值
    return {age, name, handleAdd, handleName, person}
  },
}
</script>

计算属性

<script>
import {computed, watch, ref} from 'vue'

export default {
  name: 'App',
  setup() {
    let firstName = ref('艾伦')
    let lastName = ref('barry')
    // 定义计算属性
    let fullName = computed({
      get() {
        return firstName.value + '-' + lastName.value
      },
      set(value) {
        const nameArr = value.split('-')
        firstName.value = nameArr[0]
        lastName.value = nameArr[1]
      }
    })
    return {firstName, lastName, fullName}
  },
}
</script>

监听属性

<script>
import {watchEffect, watch, ref} from 'vue'

export default {
  name: 'App',
  setup() {
    let age = ref(18)
    let name = ref('barry')
    // 定义监听属性
    watch(name, () => {
      console.log('name值变了')
    })
    // vue3中多的watchEffect
    watchEffect(() => {
      // 只要函数中使用的变量发生变化,它就会触发
      let a = age.value + 1
      console.log('变量改变了')
    })
    return {age, name}
  },
}
</script>

生命周期

1.vue3中继续使用vue2中的生命周期钩子,但有两个更名了:
beforeDestroy改名为:beforeUnmount
destroyed改名为:unmounted

2.vue3也提供了Composition API形式的生命周期钩子,与vue2中的钩子对应关系:
beforeCreate===>setup()
created=======>setup()
beforeMount ===>onBeforeMount
mounted=======>onMounted
beforeUpdate===>onBeforeUpdate
updated =======>onUpdated
beforeUnmount ==>onBeforeUnmount
unmounted =====>onUnmounted

hooks

1.hooks本质上是一个函数,把setup函数中使用的Composition API继续封装
-类似vue2中的mixin
-自定义hook的优势:可以重复使用代码, 让setup中的逻辑更清楚易懂

打点功能(components/usePoint.js)

import {onMounted, onUnmounted, reactive} from "_vue@3.2.41@vue";

export default function () {
    let p = reactive({
        x: 0, y: 0,
    })

    function getPoint(event) {
        p.x = event.pageX
        p.y = event.pageY
    }

    // 声明周期钩子的onMounted,当页面挂载就会执行
    onMounted(() => {
        // 给鼠标增加监听事件,当鼠标点击,就会执行这个函数
        window.addEventListener('click', getPoint)
    })
    // 组件被销毁时,把功能去除
    onUnmounted(() => {
        window.removeEventListener('click', getPoint)
    })
    return p
}

在需要的组件中引入

<template>
  <h2>x坐标为:{{ p.x }}---y坐标为:{{ p.y }}</h2>
</template>
<script>
import usePoint from './components/usePoint.js'

export default {
  name: 'app',
  setup() {
    let p = usePoint
    return p
  },
}
</script>

toRefs

<template>
  <h1>名字:{{ name }}---年龄:{{ age }}</h1>
  <button @click="handleShow">点击显示取消</button>
</template>
<script>
import {toRefs, reactive} from "_vue@3.2.41@vue";

export default {
  name: 'app',
  setup() {
    let data = reactive({
      name: 'barry',
      age: 18,
      isShow: true
    })

    function handleShow() {
      data.isShow = !data.isShow
      data.age++
    }

    return {
      ...toRefs(data),
      handleShow
    }
  },
}
</script>

标签:name,setup,let,vue3,ref,age
From: https://www.cnblogs.com/riuqi/p/16852538.html

相关文章

  • vite_vue3自动引入
    //github地址:https://github.com/antfu/unplugin-auto-import1.npmi-Dunplugin-auto-import2.vite.config.tsimportAutoImportfrom'unplugin-auto-import/vi......
  • vue3
    目录回顾vue-router路由守卫vue3一、介绍二、创建vue3项目的两种方式三、setup函数vue3新增的setup配置项函数的特点此时的变量age值不能够和渲染的一样增减,因为没有响应......
  • vue3简介
    vue3介绍创建vue3项目的两种方式setup函数ref和reactive计算和监听属性计算属性监听属性生命周期hookshook/usePoint.js在想使用的组......
  • Vue3学习笔记(四)——组件、生命周期
    一、组件如果我们将一个页面中所有的处理逻辑全部放在一起,处理起来就会变得非常复杂,而且不利于后续的管理以及扩展,但如果,我们将一个页面拆分成一个个小的功能块,每个功能......
  • 学习vue3(四)(生命周期,父子组件传参,动态组件)
    组件的生命周期简单来说就是一个组件从创建到销毁的过程成为生命周期在我们使用Vue3组合式Api是没有 beforeCreate和 created这两个生命周期的,用setup函数代替,......
  • vue3-组合式api-watch,watchEffect
    <template> <div>  {{counter}}  <button@click="changeCounter">改变counter</button>  <br/>  {{user.name}}  <button@click="chan......
  • vue3 结合 element-plus 框架实现增删改查功能(不连接数据库)
    ......
  • 学习Vue3 (三)
    computed用法计算属性就是当依赖的属性的值发生变化的时候,才会触发他的更改,如果依赖的值,不发生变化的时候,使用的是缓存中的属性值。1函数形式<template><div>......
  • 学习vue3(二)
    reactive用来绑定复杂的数据类型例如对象数组,他是不可以绑定普通的数据类型这样是不允许会报错绑定普通的数据类型我们可以使用昨天讲到ref你如果用ref去绑定对象......
  • 学习Vue3(一)
    重写双向绑定vue2基于Object.defineProperty()实现vue3基于Proxyproxy与Object.defineProperty(obj,prop,desc)方式相比有以下优势://丢掉麻烦的备份数据//省去for......