Vue 3 computed与watch

computed 

  computed代码演示结果如下截图:

  代码如下:


<script setup>

import { computed, ref } from 'vue'

// 声明数据
const list = ref([1,2,3,4,5,6])

// 计算属性
const computedList = computed(() => {
  // 返回list里面所有大于2的数据
  return list.value.filter(item => item > 2)
})

// 定义一个修改数组的方法
const addFn = () => {
  list.value.push(999)
}

</script>


<template>
  <div class="about">
    <div>原始数据:{{ list }}</div>
    <div>计算属性数据:{{ computedList }}</div>
    <button @click="addFn" type="button">修改</button>
  </div>
</template>

<style>
</style>

watch

  1.浅监听(普通监听,只能监听简单数据类型,如int,string)

   代码演示截图:

代码如下:


<script setup>

import { watch, ref } from 'vue'

// 定义变量 (小声哔哔,说实话,学了一两天了,还是不能适应Vue3的变量声明方式,总要用个ref包裹,而且ref函数会把这个变量包装成对象类型)
// 在script区域里,要把用ref声明的变量扒开一层,XXX.value;而在HTML也就是template区域,又不用扒开,会自动处理,很别扭,很割裂
// 关键是,不用ref声明变量吧,他就不是响应式的,不是响应式这是万万不能的。
// 算了,不说了。
const nickName = ref('博文')

// 一个改变变量的方法
const changeNicknName = () => {
  nickName.value = '博文呀123'
}

// 监听方法,监听nickName变量
watch(nickName, (newValue, oldValue) => {
  console.log(newValue, oldValue)
})

</script>


<template>
  <div>
    <div>nickName:{{ nickName }}</div>
    <button @click="changeNicknName" type="button">修改变量nickName</button>
  </div>
</template>

<style>
</style>

  以上是单个简单类型变量的监听,接下来是多个简单类型变量的监听。

  代码演示截图如下:

代码如下:

<script setup>
import { watch, ref } from 'vue'

const varOne = ref('变量1')
const varTwo = ref('变量2')

const changeVarOne = () => {
    varOne.value = '变量1更改了!!!'
}

const changeVarTwo = () => {
    varTwo.value = '变量2更改了!!!'
}

watch([varOne, varTwo], (newArray, oldArray) => {
    console.log(newArray, oldArray)
})

</script>

<template>
<div>
    <div> {{ varOne }} </div>
    <div> {{ varTwo }} </div>
    <button @click="changeVarOne"> 更改第一个变量 </button>
    <div>————————————————————————————————————————————————————————————————————</div>
    <button @click="changeVarTwo"> 更改第二个变量 </button>
</div>
</template>

<style scoped>

</style>

   2. 立即监听(页面挂载完成,立马进行一次监听)

   代码运行截图如下:

代码如下:

<script setup>
import { watch, ref } from 'vue'

const varOne = ref('变量1')
const varTwo = ref('变量2')

const changeVarOne = () => {
    varOne.value = '变量1更改了!!!'
}

const changeVarTwo = () => {
    varTwo.value = '变量2更改了!!!'
}

watch([varOne, varTwo], (newArray, oldArray) => {
    console.log(newArray, oldArray)
}, 
{
 immediate: true
})

</script>

<template>
<div>
    <div> {{ varOne }} </div>
    <div> {{ varTwo }} </div>
    <button @click="changeVarOne"> 更改第一个变量 </button>
    <div>————————————————————————————————————————————————————————————————————</div>
    <button @click="changeVarTwo"> 更改第二个变量 </button>
</div>
</template>

<style scoped>

</style>

   3. 深度监听(deep属性,用于监听复杂数据类型,如对象类型)

   代码截图如下:

代码如下:

<script setup>
import { watch, ref } from 'vue'

const userInfo = ref({
    name: '博文呀123',
    age: '999',
    exp: '1年'
})

const changeUserInfo = () => {
    userInfo.value = {
        name: '无名码农',
        age: 999,
        exp: '1年',
        level: 'Lv1'
    }
}

watch(userInfo, (newValue) => {
    console.log(newValue)
}, {
    deep: true
})

</script>

<template>
<div>
    <div> {{ userInfo }} </div>
    <button @click="changeUserInfo"> 更改对象 </button>
</div>
</template>

<style scoped>

</style>

对对象中某个属性进行监听,代码演示截图如下:

代码如下:

<script setup>
import { watch, ref } from 'vue'

const userInfo = ref({
    name: '博文呀123',
    age: '999',
    exp: '1年'
})

const changeUserInfo = () => {
    userInfo.value = {
        name: '无名码农',
        age: 123,
        exp: '1年',
        level: 'Lv1'
    }
}

// watch(userInfo, (newValue) => {
//     console.log(newValue)
// }, {
//     deep: true
// })

watch(() => userInfo.value.age, (newValue, oldValue) => {
    console.log(newValue, oldValue)
})

</script>

<template>
<div>
    <div> {{ userInfo }} </div>
    <button @click="changeUserInfo"> 更改对象 </button>
</div>
</template>

<style scoped>

</style>

总结

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值