Vue3快速上手(三)Composition组合式API及setup用法

本文详细介绍了Vue2的OptionsAPI和Vue3的CompositionAPI,包括如何在Vue2中使用data、methods和在Vue3中使用setup()进行组件功能的组织。还讨论了如何通过vite-plugin-vue-setup-extend插件简化Vue3的setup用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

一、Vue2的API风格

Vue2的API风格是Options API,也叫配置式API。一个功能的数据,交互,计算,监听等都是分别配置在data, methods,computed, watch等模块里的。如下:

<template>
    <div class="person">
        <h3>姓名:{{ name }}</h3>
        <button @click="updatePersonName">修改姓名</button>
    </div>
</template>
<script lang="ts">
import { computed, watch } from 'vue';
export default {
    name: 'Person',
    data() {
        return {
            name: "李四"
        };
    },
    methods: {
        updatePersonName() {
            this.name = "王五"
        }
    },
    computed: {

    },
    watch: {

    }
}
</script>


二、Vue3的API风格

Vue3的API风格是Composition API,也叫组合式API。一个功能的数据,交互,计算,监听等都是通过函数的方式,组织在一起的。
配合Hooks使用更加完美。这个后面会涉猎。

2.1 setup()基本用法

<template>
    <div class="person">
        <h3>姓名:{{ name }}</h3>
        <button @click="updatePersonName">修改姓名</button>
    </div>
</template>
<script lang="ts">
export default {
    name: 'Person',
    // setup在beforeCreate前加载
    setup() {
        console.log(this);// undefined
        // data
        let name = "李四" // 非响应式数据
        // 对非响应式数据直接赋值修改是在方法里生效的,但在页面里的不生效的
        function updatePersonName(){
            console.log('调用修改name方法');
            name = "王五" 
            console.log('改之后name: ', name);// 王五
        }
        return {name, updatePersonName};
    }
}
</script>

2.2 setup省事用法

单独建立script将setup提出单独写,可以不用return

 <template>
    <div class="person">
        <h3>姓名:{{ name }}</h3>
        <button @click="updatePersonName">修改姓名</button>
    </div>
</template>
<script lang="ts">
export default {
    name: 'Person',
    // setup在beforeCreate前加载
    // setup() {
    //     console.log(this);// undefined
    //     // data
    //     let name = "李四" // 非响应式数据
    //     // 对非响应式数据直接赋值修改是在方法里生效的,但在页面里的不生效的
    //     function updatePersonName(){
    //         console.log('调用修改name方法');
    //         name = "王五" 
    //         console.log('改之后name: ', name);// 王五
    //     }
    //     return {name, updatePersonName};
    // }
}
</script>
<script lang='ts' setup>
    // data
    let name = "李四" // 非响应式数据
    // 对非响应式数据直接赋值修改是在方法里生效的,但在页面里的不生效的
    function updatePersonName(){
        console.log('调用修改name方法');
        name = "王五" 
        console.log('改之后name: ', name);// 王五
    }
</script>

此时,发现有2个script标签,而第一个没有setup的标签,只是标注了一个组件名称。略微多余。
可以安装一个插件vite-plugin-vue-setup-extend,解决该问题:

wangdy@mb vue3_study % npm install vite-plugin-vue-setup-extend -D
npm WARN deprecated sourcemap-codec@1.4.8: Please use @jridgewell/sourcemap-codec instead

added 3 packages in 2s

然后修改vite.config.ts文件,将VueSetupExtend引入:

import { fileURLToPath, URL } from 'node:url'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import VueSetupExtend from 'vite-plugin-vue-setup-extend'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    VueSetupExtend()
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    }
  }
})

然后,就可以删掉无setup的script标签了,并在有setup的标签中,通过name属性指定组件的名称:

<script lang='ts' setup name="PersonCom">
    let name = "李四"
    function updatePersonName(){
        console.log('调用修改name方法');
        name = "王五" 
        console.log('改之后name: ', name);
    }
</script>

通过浏览器的vuejs-devtools插件可以查看组件名称已经生效:
在这里插入图片描述

END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一掬净土

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值