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

前端 - 关于vue3响应式更新的疑问?

罗睿识
2023-09-13

例如我创建了一个dataHook

import { ref } from 'vue';export function dataHook() {  const v = ref(1);  return {    v  };}

main.ts

const app = createApp(App);const { v } = dataHook();app.mount('#app');setTimeout(() => {  console.log(v);}, 5000);

页面有个按钮就执行v.value += 1,为什么console.log还是原值1呢?

<Button @click="onClickO">点击hook {{ v }}</Button><script setup lang="ts">import { dataHook } from '@/utils/data';const { v } = dataHook();function onClickO() {  v.value += 1;}</script>

共有2个答案

慕容高卓
2023-09-13
import { createApp, computed } from 'vue';import App from './App.vue';import { dataHook } from './dataHook';const app = createApp(App);const { v } = dataHook();const vWatcher = computed(() => v.value);app.config.globalProperties.$vWatcher = vWatcher;app.mount('#app');setTimeout(() => {  console.log(vWatcher.value); // 打印 v 的当前值,不是初始值}, 5000);
<button @click="v.value += 1">增加 v 的值</button>
宗政霄
2023-09-13

跟 Vue 无关,而是很基础的 JS 语法问题。

先直接抛开 Vue,你现在是三个文件对吧?

// shared.jsexport function getFoo() {  const foo = new Foo();  return { foo };}// a.jsimport { getFoo } from './shared';const { foo } = getFoo();// b.jsimport { getFoo } from './shared';const { foo } = getFoo();

问:此时 a.js 里的 foo,跟 b.js 里的 foo,是同一个对象实例吗?

答:不是,这两个文件里分别调用的 getFoo(),里面都是新 new 出来的,当然是两个对象实例。

再问:那么怎样可以让 a.js 和 b.js 共享同一个对象?

再答:得把它提出来啊:

// shared.jsconst foo = new Foo();export function getFoo() {  return { foo };}
 类似资料:
  • 在vue3框架中,我使用ref定义了一个变量,但是发现在更新其数据之后,页面上并不会有响应式变化,具体表现是在更新数据之后不会出现表格最前面的选择框 数据定义 数据初始化,其中list是一个数组,具有唯一的id属性 组件A中定义了计算属性rowSelection 当点击一个按钮之后,触发BatchEdit函数,通过emit抛出新的rowSelection 在父组件中进行事件定义并更新内容 rowS

  • 如题,定义一个组件,设置 props 如下: 当我直接定义 的时候,会提示这样会失去响应性 所以想问下,如何可以将这样的定义,转为响应性

  • 父组件 子组件 为什么执行getSonData的时候,无法获取到子组件的data?sonRef.value.data只能在onMounted内使用吗?不能在父组件的方法里执行?

  • 执行了click事件后,为什么videoUrl的值在页面上更新了,控制台里没更新啊 想知道原因

  • 以下代码在 chrome 输出 1,2,3 这个在网上找到了,forEach 一开始就已经获取了 数组长度 The range of elements processed by forEach is set before the first call to callbackfn. Elements which are appended to the array after the call to

  • 刚开始学后端,有几个问题想要请教下大家 1 是使用maven,还是IDEA的提供的intellij?不使用另一个的原因是? 2 如果是使用maven的话,是使用IDEA自带的maven,还是自己额外下载?看的一些网上教程都是让自己单独下载maven,说IDEA自带的maven不方便配置。 谢谢