• 【前端每日基础】day44——vue2和vue3的区别


    1. Composition API vs Options API

    Vue 2 (Options API)
    在 Vue 2 中,组件的逻辑通常是通过 data、methods、computed 等选项来定义的。

    // Vue 2 组件
    export default {
      data() {
        return {
          count: 0
        }
      },
      computed: {
        doubleCount() {
          return this.count * 2;
        }
      },
      methods: {
        increment() {
          this.count++;
        }
      }
    }
    

    Vue 3 (Composition API)
    在 Vue 3 中,可以使用 Composition API,将相关的逻辑组合在一起,使代码更易于复用和维护。

    // Vue 3 组件
    import { ref, computed } from 'vue';
    
    export default {
      setup() {
        const count = ref(0);
        const doubleCount = computed(() => count.value * 2);
        
        const increment = () => {
          count.value++;
        };
    
        return {
          count,
          doubleCount,
          increment
        };
      }
    }
    

    2. 响应性系统

    Vue 2
    Vue 2 的响应性系统基于 Object.defineProperty,这意味着不能检测到对象属性的添加和删除。

    // Vue 2 响应性
    var vm = new Vue({
      data: {
        message: 'Hello'
      }
    });
    
    vm.message = 'Hello Vue!'; // 响应式
    vm.newProperty = 'New'; // 非响应式
    

    Vue 3
    Vue 3 使用 Proxy 实现响应性系统,能够检测到对象属性的添加和删除。

    // Vue 3 响应性
    import { reactive } from 'vue';
    
    const state = reactive({
      message: 'Hello'
    });
    
    state.message = 'Hello Vue!'; // 响应式
    state.newProperty = 'New'; // 也是响应式
    

    3. TypeScript 支持

    Vue 2
    在 Vue 2 中使用 TypeScript 通常需要额外的配置和类型声明。

    // Vue 2 中使用 TypeScript
    import Vue from 'vue';
    import Component from 'vue-class-component';
    
    @Component
    export default class MyComponent extends Vue {
      message: string = 'Hello';
    
      get doubleMessage(): string {
        return this.message + this.message;
      }
    
      increment() {
        this.message += '!';
      }
    }
    

    Vue 3
    Vue 3 对 TypeScript 支持更好,类型推导更加完善。

    // Vue 3 中使用 TypeScript
    import { defineComponent, ref, computed } from 'vue';
    
    export default defineComponent({
      setup() {
        const message = ref('Hello');
        const doubleMessage = computed(() => message.value + message.value);
        
        const increment = () => {
          message.value += '!';
        };
    
        return {
          message,
          doubleMessage,
          increment
        };
      }
    });
    

    4. 多根节点 (Fragments)

    Vue 2
    Vue 2 中每个组件必须有一个根节点。

    <template>
      <div>
        <p>First paragraphp>
        <p>Second paragraphp>
      div>
    template>
    

    Vue 3
    Vue 3 允许组件返回多个根节点。

    <template>
      <p>First paragraphp>
      <p>Second paragraphp>
    template>
    

    5. Teleport

    Vue 3
    Vue 3 引入了 Teleport 组件,允许开发者将某个组件的 DOM 树渲染到当前组件树之外的任意位置。

    <template>
      <div>
        <button @click="showModal = true">Open Modalbutton>
        <Teleport to="body">
          <div v-if="showModal" class="modal">
            <p>This is a modalp>
            <button @click="showModal = false">Close Modalbutton>
          div>
        Teleport>
      div>
    template>
    
    <script>
    import { ref } from 'vue';
    
    export default {
      setup() {
        const showModal = ref(false);
        return { showModal };
      }
    }
    script>
    

    通过这些代码实例,您可以更清晰地看到 Vue 2 和 Vue 3 之间的一些主要区别和改进。

  • 相关阅读:
    数字孪生+燃气管理,开启智慧燃气管理新模式
    Win11怎么修改关机界面颜色?Win11修改关机界面颜色的方法
    Nginx自签名证书的配置
    iphone xr密码错误太多次 连接itunes
    读书笔记:SQL 查询中的SQL*Plus 替换变量(DEFINE变量)和参数
    8月13日TensorFlow学习笔记——卷积神经网络、CIFAR100、ResNet
    文件防泄密软件哪个好?
    mfc设计计算器问题
    jdk+tomcat+mysql+war打包整合成exe文件,Windows下一键安装
    云计算就业方向及前景怎么样
  • 原文地址:https://blog.csdn.net/modaoshi51991/article/details/139480533