Vue3的一些小优点


前言

一、Vue3的优点?

  1. 相比 vue2 更快 更小,开发时搭配 vite 热编译瞬间完成。
  2. 组合式API 搭配 es6 的语法编写代码很舒适。

二、Vue3与Vue2的区别

1.响应式原理不同

vue2响应式原理采用的object.defireProperties 监听对象

vue3采用的pxoy代理的方式监听对象

2.启动方式不同

  1. vue2启动代码如下
//vue2
new Vue({
store,
router,
render:h=>h(app)
}).$mount(#app)
  1. vue3启动代码如下
//vue3
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
var app =  createApp(App)
app.use(store).use(router).mount('#app')

3.全局方法定义不同

  1. vue2代码如下:
//vue2
Vue.protoype.$http = axios
  1. vue3代码如下:
//vue3
var app =  createApp(App)
app.config.globalProperties.$http = axios

4.template根组件的不同

  1. vue2有且只有一个根组件
  2. vue3随意

5.生命周期钩子函数不同

  1. vue2生命周期钩子函数代码如下
//创建前后
beforecreate(),created()
//挂载前后
beforemount(),mounted()
//更新前后
beforeupdate(),updated()
//销毁前后
beforedestory(),destroyed()
  1. vue3生命周期钩子函数代码如下
setup() : //开始创建组件之前,在 beforeCreate 和 created 之前执行,创建的是 data 和 method
onBeforeMount() : //组件挂载到节点上之前执行的函数;
onMounted() : //组件挂载完成后执行的函数;
onBeforeUpdate(): //组件更新之前执行的函数;
onUpdated(): //组件更新完成之后执行的函数;
onBeforeUnmount(): //组件卸载之前执行的函数;
onUnmounted(): //组件卸载完成后执行的函数;
onActivated(): //被包含在 <keep-alive> 中的组件,会多出两个生命周期钩子函数,被激活时执行;
onDeactivated(): //比如从 A 组件,切换到 B 组件,A 组件消失时执行;
onErrorCaptured(): //当捕获一个来自子孙组件的异常时激活钩子函数。

三、setup组合式api的使用

1.小示例

小实例代码如下:

<template>
  <div>
    <div>
        <button @click="num++">{{num}}</button>
        <button @click="setnum">改为5</button>
        <div v-for="(item,index) in list" :key="item">{{item}}
        <button @click="list.splice(index,1)">×</button>
        </div>
        <p>{{twiceNum}}</p>
        <p ref="myp">我爱我的祖国</p>
    </div>
  </div>
</template>
<script>
// 导入一个响应式应用ref
import {ref,reactive,watch,watchEffect,computed,onMounted} from 'vue'
// 优点1:按需引入,需要什么功能导入什么
// 优点2:更加接近原生js,阅读起来更清晰
// 优点3:没有this,降低了代码耦合性,提高了复用性
export default {
  setup() {
    // console.log("组合式api","创建前后执行")
    // 定义一个值类型响应式对象num 默认值5
    const num = ref(5);
    // 定义一个引用类型响应式数据list 默认值
    const list = reactive(['vue','js','html'])
    // 定义一个修改num的方法
    function setnum(){
      // 在setup内容修改num的值要修改num。value的值
      num.value = 5
    }
    watch(num,function(nval,oval){
      console.log("num由",oval,"变化为",nval)
    })
    watchEffect(() => {
      // 只要在改变回调函数中引用的变量,都会哦监听变化
      // console.log(num.value,list[1],"变化了")
    })

    var twiceNum = computed(()=>num.value*2)
    // 在setup没有 创建前后,有挂载,更新,卸载前后
    var myp = ref(null)
    // setup中的生命周期前面加on
    onMounted(()=>{
      console.log("组件已经挂载完毕")
      myp.value.addEventListener("click",()=>alert(myp.value.innerText))
    })

    // 返回对象num
    return {num,list,setnum,twiceNum,myp}
  }
}
</script>
<style>
/* vue2代码和vue3基本相同 */
</style>

2.一个获取窗口宽高的方法

// html代码
<template>
    <div>
        <h1>自定义api组合zpi</h1>
        <p>{{winsize}}</p>
    </div>
</template>
<script>
    import useWinSize from '@/utils/useWinSize'
    export default{
        setup() {
            const winsize = useWinSize()
            return {winsize}
        }
    }
</script>

// js代码(src目录新建js)
import {reactive,onMounted,onBeforeUnmount} from 'vue'
// 定义一个获取窗口宽高的方法,
function useWinSize(){
    var size = reactive({
        w:window.innerWidth,
        h:window.innerHeight,
    })
    onMounted(()=>{
        window.addEventListener("resize",changeHd)
    })
    onBeforeUnmount(()=>{
        window.removeEventListener("resize",changeHd)
    })

    function changeHd(){
        size.w = window.innerWidth;
        size.h = window.innerHeight;
    }
    // 返回一个固定值
    return size
}
// 导出
export default useWinSize
### Vue 3 的主要优点及特性 #### 性能提升 Vue 3 对性能进行了显著改进,其中一个重要变化是从 `Object.defineProperty` 转向使用 ES6 的 `Proxy` 技术[^4]。这种转变不仅提高了响应式的效率,还减少了对原始对象的修改需求,使得 JavaScript 引擎能够更高效地处理数据。 #### 更加模块化的架构 Vue 3 提供了一个更加模块化的核心设计,这有助于开发者按需加载所需的功能,从而减少打包体积并提高应用的整体性能[^1]。 #### Composition API Composition API 是 Vue 3 中引入的一个重要概念,旨在解决 Vue 2 中 Options API 存在的一些局限性。它允许开发者以函数的形式组合逻辑,使代码更具复用性和灵活性。以下是几个常见的 Composition API 方法及其作用: - **setup**: 它是 Composition API 的入口方法,在组件实例创建之前执行,并返回需要暴露给模板的数据或方法[^3]。 - **ref** 和 **reactive**: 这两个方法用于声明响应式变量。`ref` 适用于基本类型,而 `reactive` 则针对复杂对象[^3]。 - **computed**: 创建计算属性,支持缓存机制,只有当依赖项发生变化时才会重新求值[^3]。 - **watchEffect**, **watchPostEffect**, **watchSyncEffect**, 和 **watch**: 提供多种方式监听状态的变化,并触发相应的副作用[^3]。 #### 生命周期调整 Vue 3 继承了 Vue 2 的生命周期钩子体系,但在命名上做了微调以便更好地反映实际用途。例如,`beforeDestroy` 改名为 `beforeUnmount`, `destroyed` 改为 `unmounted` 等等[^2]。此外,新的 Composition API 可以通过特定的方法来替代传统的选项式生命周期钩子。 #### Teleport 功能 借助 `Teleport` 特性,开发者能够在保持组件内部逻辑的同时,将某些 DOM 结构移动到应用程序外部指定的位置渲染出来。这一能力特别适合实现模态框、提示消息等功能[^5]。 ```html <teleport to="body"> <!-- 将此部分内容附加至 body 下 --> </teleport> ``` #### 自定义 Renderers Vue 3 内置了通用的 renderer 接口 (`createRenderer`) ,这让构建跨平台的应用成为可能——无论是 Web 平台还是原生移动端环境都可以轻松适配[^5]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值