Vue3.0初体验

就在前几天,vue官网推出了3.xbeta版,那3版本对2版本做了哪些改动和升级呢?

下面让我们一起来体验下:

众所周知,vue2是在初始化时候,对所有数据用Object.defineProperty进行拦截,但是vue3采用了es6中proxy动态拦截Reflect进行返回,初始化工作减少,性能提升;

vue2在数据发生变化时候,会进行全局diff,vue3在模板层做了静态分析,使没有变化的节点放在render函数之外,只更新修改节点,大大提升渲染速度;

vue3.0生命周期(hooks)的变化

beforeCreated 和 created -> setup  // setup在整个生命周期中最先执行,早于beforeCreated,还没有真是节点

beforeMount -> onBeforeMount

mounted -> onMounted

beforeUpdate -> onBreforeUpdate

updated -> onUpdated

beforeDestroy -> onBeforeUnmount

distroyed -> onUnmounted

关于composition-api及hooks

import {ref、reactive、watch、watchEffect、computed} from 'Vue'

整个Componsition-API,体现的是一种逻辑抽象能力。是reactive、watchEffect、ref的组合。

主要就是可以把生命周期,响应式数据,操作函数,全部抽离再一个内部函数,所以vue3的组件就可以无限的拆分,并且数据来源还可以异常清晰。

watch和watchEffect的不同点

1、watchEffect不需要指定监听的属性,只要我们回调中引用的这些属性变更的时候,这个回调都会执行,watch需要指定监听的属性;

2、watch中有newValue,oldValue,watchEffect拿不到这些;

3、watchEffect初始化会执行(类似computed),依赖发生变化后执行回调,watch开始就指定了依赖(设置immediate:true会立即执行),当依赖变化时才会执行;

4、watchEffect如果是在setup或者生命周期里面注册的话,在组件取消挂载的时候会自动的销毁;

下面来一段完整代码

import { ref, computed, reactive, watchEffect, watch, onMounted } from 'vue'

export default {

    setup(){

        const data = reactive({

            state: 0,

            count: 0,

            doubles: computed(() => data.count*2)

        })

        const add1 = () => {

            data.state++

        }

        // 不需要添加监听属性,当count变化时候会自动执行

        watchEffect(() => {

            data.state = count

        })

        // 需要添加监听属性,data.state,count

        watch([() => data.state, () => data.count], ([newState, newCount], [oldState, oldCount]) => {

            console.log(newState, newCount, oldState, oldCount)

        })

        const roots = ref(null)

        onMounted(() => {

            roots.value.innerHTML = '小灰灰'

        })

        return {

            add,

            add1,

            data,

            roots

        }

    }

}

你可能感兴趣的:(Vue3.0初体验)