当前位置: 首页 > news >正文

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

在这里插入图片描述

一、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

相关文章:

  • 【芯片设计- RTL 数字逻辑设计入门 15 -- 函数实现数据大小端转换】
  • PKI - 借助Nginx 实现Https 服务端单向认证、服务端客户端双向认证
  • 如何使用六图一表七种武器
  • 网络安全的今年:量子、生成人工智能以及 LLM 和密码
  • 【Android-Gradle】多模块开发中,定义额外属性(全局变量),穿梭在不同的Gradle文件中(kotlin脚本版)
  • 使用二分查找优化时间复杂度
  • Transformer的PyTorch实现之若干问题探讨(一)
  • ubuntu下如何查看显卡及显卡驱动
  • php 如何判断是否上传了文件、图片
  • CGAL::2D Arrangements-5
  • Chrome 沙箱逃逸 -- Plaid CTF 2020 mojo
  • APIfox自动化编排场景(二)
  • Codeforces Round 923 (Div. 3) C. Choose the Different Ones(Java)
  • 【MATLAB】GA_BP神经网络回归预测算法
  • 基于51 单片机的交通灯系统 源码+仿真+ppt
  • LoRA:语言模型微调的计算资源优化策略
  • 树莓派4B(Raspberry Pi 4B)使用docker搭建springBoot/springCloud服务
  • Java玩转《啊哈算法》纸牌游戏之小猫钓鱼
  • CSP-动态规划-最长公共子序列(LCS)
  • HiveSQL——条件判断语句嵌套windows子句的应用
  • 据报特斯拉寻找新CEO,马斯克财报会议上表态:把更多时间投入特斯拉
  • 解放日报:抢占科技制高点,赋能新质生产力
  • 建设银行南昌分行引金融“活水”,精准灌溉乡村沃土
  • 何立峰出席驻沪中央金融机构支持上海建设国际金融中心座谈会并讲话
  • 邮储银行一季度净赚超252亿降逾2%,营收微降
  • “五一”假期,又有多地将向社会开放政府机关食堂