当前位置: 首页 > 知识库问答 >
问题:

vue3 - Vue 3中ref和shallowRef的引用类型在同一函数中修改值为何导致视图同步更新?

叶鸿
2024-05-31

vue3中关于ref和shallowRef声明的引用类型在同一函数中修改值,会造成shallowRef声明的视图部分也更新的问题

在视图中声明

 <h1>        {{ r }}           </h1>    <h2>        {{ sr }}    </h2><button @click="change">修改</button>

js代码

const r = ref({name:'111111'})const sr = shallowRef({name:'222222'})const change = () => {    r.value.name = '333333'    sr.value.name = '444444'    console.log(r,sr);}

这样会造成sr也会同步更新,然后注释掉r.value.name = '333333'后,就不会。
我查询过是因为ref底层和shallowRef都会触发triggerRefValue造成视图更新,但是我还是没有理解为什么reftriggerRefValue会更新另一个数据依赖

查阅过资料,链接给出:https://juejin.cn/post/7264503868137127971

共有1个答案

马淇
2024-05-31
https://github.com/vuejs/core/issues/5623

跟你一模一样的问题。答案楼里有人说了:

... during re-render all of the component's template is updated with the latest data.
 类似资料:
  • 页面代码中引用本地图片: 页面中的地址: 我想将 /src/assets/image/login/icon_login.png 变成 http://localhost:3000/src/assets/image/login/icon_login.png 应该如何配置? 我配置了vite里的base 没有效果

  • 我有这个变量: 通过单击按钮,我执行此功能: 变量不会改变,我的输出是: 但是如果我第二次按下按钮,我会得到输出: 为什么值第一次不改变?

  • 问题: 我使用 pinia 进行状态管理,写法大概如下,由于我修改的是数组中某个对象下的对象的属性,数组更新后,页面无法重新渲染。 当我点击按钮修改元素的 x,y,width,height 某个样式值的时候,layerList 中对应的元素的下的style对象的下属性值也会更新,由于页面是根据这个对象来渲染内联样式的, style 在手动更新后一直无法更新,想请教下各位大佬这是什么原因? 数组 l

  • 本文向大家介绍一看就懂:图解C#中的值类型、引用类型、栈、堆、ref、out,包括了一看就懂:图解C#中的值类型、引用类型、栈、堆、ref、out的使用技巧和注意事项,需要的朋友参考一下 C# 的类型系统可分为两种类型,一是值类型,一是引用类型,这个每个C#程序员都了解。还有托管堆,栈,ref,out等等概念也是每个C#程序员都会接触到的概念,也是C#程序员面试经常考到的知识,随便搜搜也有无数的文

  • 我怎么在move的时候让对应的样式也修改,也就是elRed.style或elGreen.style,现在不起作用。 可以跳转到这里直接看效果: https://play.vuejs.org/#eNqlVW1r2zAQ/is3U4gDmdPto5eWbnSMwcZg7...

  • 我正在尝试更改JTable中具有特定值的单元格,以更改为另一个值。但是,原始值是Double数据类型,我想更改为String数据类型。我写了下面的代码来更改文本,但我不知道为什么所有的值都不能匹配if语句条件。 这就是我的数据存储在文本文件中的方式:Name,N/a,-1.0 我想把-1.0改为N/A。这是我的代码: