美文网首页
修改ref创建的变量导致shallowRef创建的变量也被更新

修改ref创建的变量导致shallowRef创建的变量也被更新

作者: 变量只提升声明不提升赋值 | 来源:发表于2022-06-07 22:12 被阅读0次
import {ref,shallowRef,triggerRef,customRef} from 'vue'
    let msg = ref('小王')
    let obj = shallowRef({
        name:'小小王'
    })
    const handleCheckBut = ()=>{
        // msg.value = '大王'
        obj.value.name = '大大王'
        // triggerRef(obj)
    }

代码中修改了由shallowRef创建的对象的属性,因为shallowRef只跟踪到.value,不会再往下跟踪,所以这次修改并不会触发试图更新。

import {ref,shallowRef,triggerRef,customRef} from 'vue'
    let msg = ref('小王')
    let obj = shallowRef({
        name:'小小王'
    })
    const handleCheckBut = ()=>{
        // msg.value = '大王'
        obj.value.name = '大大王'
         triggerRef(obj)
    }

而当我们添加了triggerRef后,试图是会更新的。

import {ref,shallowRef,triggerRef,customRef} from 'vue'
    let msg = ref('小王')
    let obj = shallowRef({
        name:'小小王'
    })
    const handleCheckBut = ()=>{
         msg.value = '大王'
        obj.value.name = '大大王'
        // triggerRef(obj)
    }

现在有一个由ref创建的变量,我们修改了他的value,并且将triggerRef注释掉了,按理来说obj的更新是不会驱动视图的。但结果确实obj和msg一同在视图上更新了。

导致这个问题的原因是,ref触发视图更新的api和triggerRef触发视图更新的api是同一个api,而shallowRef在创建变量的时候其实是已经收集了依赖的,只不过没有去更新视图,恰好这个时候ref创建的变量更新导致触发了更新视图的函数,所以将已经收集的依赖一起都更新了。

相关文章

  • 修改ref创建的变量导致shallowRef创建的变量也被更新

    代码中修改了由shallowRef创建的对象的属性,因为shallowRef只跟踪到.value,不会再往下跟踪,...

  • python类的一些相关操作

    创建类 创建对象(实例) 创建变量 删除变量 修改变量 查看变量 类变量只能被实例查看而不能修改和删除

  • ES6的let const语法以及let和var的区别

    一、let和const ES6中新增的用来创建变量和常量的基于CONST创建变量,变量存储的值不能被修改(常量) ...

  • [Python] global,nonlocal

    (1)global:修改全局变量 (2)nonlocal:修改外层词法变量 (3)default:创建局部变量

  • ES6 温故知新

    let / const ES6 种用来定义变量和常量的 机遇 CONST 创建的变量,变量存储的值不能被修改(常量...

  • ThreadLocal笔记

    定义:创建线程局部变量的类 特点:一般情况下,创建的变量可以被任何一个线程访问并且修改,但是使用ThreadLoc...

  • stata 内置系统变量有哪些?

    描述 包含_variables(发音为“下划线变量”)。 这些是由 Stata 创建和更新的内置系统变量。 它们被...

  • 第一节

    1.变量 1.PHP 没有创建变量的命令。变量会在首次为其赋值时被创建:变量是存储信息的容器: PHP 变量规则:...

  • ThreadLocal详解

    ThreadLocal是一个关于创建线程局部变量的类。 通常情况下,我们创建的变量是可以被任何一个线程访问并修改的...

  • java中的ThreadLocal

    ThreadLocal是一个关于创建线程局部变量的类。通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。...

网友评论

      本文标题:修改ref创建的变量导致shallowRef创建的变量也被更新

      本文链接:https://www.haomeiwen.com/subject/yukymrtx.html