vue2与vue3的区别

439 阅读1分钟

盘点# vue2与vue3的区别

1、template

在标签这块,Vue2和Vue3的区别就是:Vue3支持碎片(Fragments),就是说template下可以有多个根节点。而在Vue2中template下只能包含一个根节点。

Vue2

<template>
    <div>我是Vue2</div>
</template>

Vue3

<template>
    <div>我是Vue3</div>
    <div>我是Vue3</div>
</template>

2、data

在data中区别很大,Vue2是在代码里分割了不同的属性,如:data,components, computed属性,methods方法等等。而Vue3中需要使用一个新的setup()方法在组件初始化构造的时候触发。

Vue2

<script>
export default {
    data(){
        return {
            username:'',
            password:''
        }
    },
    methods:{},
    computed:{}
}
</script>

Vue3

<template>
  <div>
    <h1>消息:{{message}}</h1>
    <h1>姓名:{{ datas.name }}</h1>
    <h1>年龄:{{ datas.age }}</h1>
    <h1>工作:{{datas.job.say}}</h1>
    <h3></h3>
  </div>
</template>

<script>
import {ref,reactive} from 'vue'
export default {
  setup() {
    let message=ref('hello')
    let datas=reactive({
        name:"小美",
        age:12,
        job:{
            say:100
        }
    })
    return {
        datas,
        message
    }
  },
};
</script>

3、生命周期区别

Vue2 生命周期函数

export default {
  name: '',
  data() {
    return {}
  },
  computed: {},
    beforeCreate() {
        console.log('beforeCreate —— 创建vue实例完成之前所执行的')
    },
    created() {
        console.log('created —— 实例创建完成之后的,初始化data和methods')
    },
    beforeMount() {
        console.log('beforeMount —— 开始编译把data里面的数据和vue语法生成html模板')
    },
    mounted() {
        console.log('mounted —— 开始挂载编译生成的html渲染到页面')
    },
    beforeUpdate() {
        console.log('beforeUpdate —— 当data里面数据改变时触发')
    },
    updated() {
        console.log('updated —— data里面的数据和页面保持同步')
    },
    beforeDestroy() {
        console.log('beforeDestroy —— vue实例从运行状态进入销毁状态,指令等还处于可用状态')
    },
    destroyed() {
        console.log('destroyed —— 组件完全被销毁')
    }
}

Vue3 生命周期函数

<template>
  <div>
    {{msg}}
     <button @click="obj">更新数据</button>
  </div>
</template>

<script>
import {ref} from 'vue'
import { onBeforeMount, onBeforeUnmount, onBeforeUpdate, onMounted, onUnmounted, onUpdated } from 'vue';
export default {
  setup(){
        console.log('vue3 —— setup');
        const msg = ref('我是vue3');
        // 按钮点击事件的回调
        const update = () => {
            msg.value += '1'
        }
        onBeforeMount(() => {
            console.log('onBeforeMount —— 组件挂载到节点上之前执行的函数');
        })
        onMounted(() => {
            console.log('onMounted —— 组件挂载完成后执行的函数');
        })
        onBeforeUpdate(() => {
            console.log('onBeforeUpdate —— 组件更新之前执行的函数');
        })
        onUpdated(() => {
            console.log('onUpdated —— 组件更新完成之后执行的函数');
        })
        onBeforeUnmount(() => {
            console.log('onBeforeUnmount —— 组件卸载之前执行的函数');
        })
        onUnmounted(() => {
            console.log('onUnmounted —— 组件卸载完成之后执行的函数');
        })
        return {
            msg, 
            obj
        }
    }
}
</script>