Vue3的计算属性(computed)和监听器(watch)案例语法

一:前言

Vue3 是 Vue2 的一个升级版,随着 2023年12月31日起 Vue2 停止维护。这意味着 Vue3 将会为未来国内一段时间里,前端的开发主流。因此熟练的掌握好 Vue3 是前端开发程序员所不可避免的一门技术栈。而 Vue3 是 Vue2 的一个升级版,其语法大多相似。不过也有不同之处。比如计算属性(computed)和监听器(watch)的写法就有所不同。接下来我会通过一个案例,来描述在 Vue3 中的写法。

二:案例代码

1、html 部分

这里是 html 的代码部分,由于只是基础案例,因此界面布局是没有那么复杂的,只是一些输入框这些显示罢了。显示效果见最上方的图片。

html 复制代码
<template>
    <div class="el">
        <h1>计算属性和监视</h1>
    </div>
    <fieldset>
        <legend>姓名操作</legend>
        姓氏:<input placeholder="请输入姓氏" type="text" v-model="user.firstName"/><br />
        名字:<input placeholder="请输入名字" type="text" v-model="user.lastName"/><br />
    </fieldset>
    <fieldset>
        <legend>计算属性和监视的演示</legend>
        姓名:<input placeholder="显示姓名" type="text" v-model="fullName1"/><br />
        姓名:<input placeholder="显示姓名" type="text" v-model="fullName2"/><br />
        姓名:<input placeholder="显示姓名" type="text" v-model="fullName3"/><br />
    </fieldset>
</template>

2、JavaScript 部分

这块是我们实现的逻辑了。这里我写的还是最初的 Vue3 版本,并不是 3.2 之后的写法,我们可以看到 computed 中的 get 和 set 写法。以及两种 watch 监听器方法。

javascript 复制代码
import { computed, defineComponent, reactive, ref, watch, watchEffect } from 'vue';


export default defineComponent({
    setup() {
        // 定义响应式对象
        const user = reactive({
            firstName: '东方',
            lastName: '不败',
        })
        // 当只有一个回调函数的时候,默认是get
        const fullName1 = computed(()=>{
            return user.firstName + '_' + user.lastName
        })
        // computed同步修改
        const fullName2 = computed({
            get(){
                return user.firstName + '_' + user.lastName
            },
            set(val:string){
                const names = val.split('_')
                user.firstName = names[0]
                user.lastName = names[1]
            }
        })
        // 监听器
        const fullName3 = ref('')
        watch(user,({firstName,lastName})=>{
            fullName3.value = firstName + '_' + lastName
        },{immediate:true,deep:true})

        // 第二种监听器,和上面的泣别就是默认immediate和deep为true
        watchEffect(()=>{
            fullName3.value = user.firstName + '_' + user.lastName
        })

        return {
            user,
            fullName1,
            fullName2,
            fullName3
        }
    }
})

3、css部分

html 复制代码
<style lang="scss" scoped>
fieldset{
    padding: 10px;
}
</style>

三:结尾

有 Vue2 基础的小伙伴对这块写法应该很容易理解。初学者可以自己动手写一下。最后附上项目gitee源码地址:

乾辰/vue3全家桶练习https://gitee.com/qianchen12138/vue3-family-bucket-practice

相关推荐
翻滚吧键盘21 分钟前
vue绑定一个返回对象的计算属性
前端·javascript·vue.js
秃了也弱了。40 分钟前
Chrome谷歌浏览器插件ModHeader,修改请求头,开发神器
前端·chrome
乆夨(jiuze)1 小时前
记录H5内嵌到flutter App的一个问题,引发后面使用fastClick,引发后面input输入框单击无效问题。。。
前端·javascript·vue.js
忧郁的蛋~1 小时前
HTML表格导出为Excel文件的实现方案
前端·html·excel
小彭努力中1 小时前
141.在 Vue 3 中使用 OpenLayers Link 交互:把地图中心点 / 缩放级别 / 旋转角度实时写进 URL,并同步解析显示
前端·javascript·vue.js·交互
然我2 小时前
别再只用 base64!HTML5 的 Blob 才是二进制处理的王者,面试常考
前端·面试·html
NanLing2 小时前
【纯前端推理】纯端侧 AI 对象检测:用浏览器就能跑的深度学习模型
前端
呆呆的心2 小时前
前端必学:从盒模型到定位,一篇搞定页面布局核心 🧩
前端·css
小飞悟2 小时前
前端高手才知道的秘密:Blob 居然这么强大!
前端·javascript·html
小old弟2 小时前
用Sass循环实现炫彩文字跑马灯效果
前端