• Vue3-ref、reactive函数的watch


    Vue3中引入了一个新的API:ref,它可以将一个简单的JavaScript类型值转换为一个响应式对象。在使用ref创建响应式变量时,我们可以使用value属性来访问或修改该变量的值。

    例如:

    1. import { ref } from 'vue'
    2. const count = ref(0)
    3. console.log(count.value) // 输出0
    4. count.value++ // 修改值
    5. console.log(count.value) // 输出1

    除了ref之外,Vue3还提供了一个reactive函数,可以将对象转换为响应式对象。在使用reactive创建响应式对象时,我们可以通过修改对象的属性值来触发响应式更新。

    例如:

    1. import { reactive } from 'vue'
    2. const state = reactive({
    3. count: 0,
    4. name: 'Vue3'
    5. })
    6. console.log(state.count) // 输出0
    7. state.count++ // 修改值
    8. console.log(state.count) // 输出1

    在使用Vue中观测数据的变化时,我们可以使用watch函数。在Vue3中,watch函数的使用方式与Vue2基本一致,但是Vue3中添加了一些新的使用方式。

    其中,主要有两种:

    1. 直接观测一个响应式值。
    1. import { watch } from 'vue'
    2. const count = ref(0)
    3. watch(count, (newValue, oldValue) => {
    4. console.log(`count的值发生了变化,新值为${newValue},旧值为${oldValue}`)
    5. })
    6. count.value++ // 输出:count的值发生了变化,新值为1,旧值为0

    1. 观测一个函数的返回值。
    1. import { watch } from 'vue'
    2. const count = ref(0)
    3. watch(() => {
    4. return count.value * 2
    5. }, (newValue, oldValue) => {
    6. console.log(`count的值发生了变化,新值为${newValue},旧值为${oldValue}`)
    7. })
    8. count.value++ // 输出:count的值发生了变化,新值为2,旧值为0

    在Vue3中,我们还可以使用watchEffect函数来观测一个函数中使用的所有响应式值的变化。当这些响应式值发生改变时,观测的函数就会被重新执行。

    例如:

    1. import { watchEffect, reactive } from 'vue'
    2. const state = reactive({
    3. count: 0,
    4. name: 'Vue3'
    5. })
    6. watchEffect(() => {
    7. console.log(`count的值发生了变化,新值为${state.count}`)
    8. })
    9. state.count++ // 输出:count的值发生了变化,新值为1

    需要注意的是,watchEffect函数会在组件的挂载阶段立即执行一次。如果我们不想在组件挂载时就执行回调函数,可以在watchEffect函数中传入一个可选的选项对象,其中包含lazy属性,将其设置为true即可。

    例如:

    1. import { watchEffect, reactive } from 'vue'
    2. const state = reactive({
    3. count: 0,
    4. name: 'Vue3'
    5. })
    6. watchEffect(() => {
    7. console.log(`count的值发生了变化,新值为${state.count}`)
    8. }, { lazy: true })
    9. state.count++ // 不会输出

  • 相关阅读:
    Cookie与Session的区别
    如何解决 IntelliJ IDEA 2024 启动总闪退问题?一站式解决方案!
    手记系列之四 ----- 关于使用MySql的经验
    centos 安装freeswitch
    深入理解箭头函数和传统函数的区别
    推荐几款火爆的Python在线编辑器
    分支和循环语句
    [HNCTF 2022 WEEK2]e@sy_flower
    Eclipse嵌套项目部分项目丢失SVN源信息
    设置Unity URP管线中的渲染开关
  • 原文地址:https://blog.csdn.net/m0_74801194/article/details/134499108