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

前端 - 关于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 响应式无法更新 下面是最小复现代码 https://play.vuejs.org/#eNqVVs2O2zYQfhVWF2kBV27QnlzbaJIu2vTQD... 点击“修改值”这个按钮,最上层组件能够更新值, 但是最内层的组件无法监听到值被改变了

  • Vue的 响应性语法糖 文档中 响应式 props 解构 部分提到了: 和 .value 类似,为了保持响应性,你始终需要以 props.x 的方式访问这些 prop。这意味着你不能够解构 defineProps 的返回值,因为得到的变量将不是响应式的、也不会更新。 真的是这样吗?解构 defineProps 的返回值得到的变量将不是响应式,也不会更新。 例子1 父组件响应式数据改变 => 子组件

  • 在vue3框架中,我使用ref定义了一个变量,但是发现在更新其数据之后,页面上并不会有响应式变化,具体表现是在更新数据之后不会出现表格最前面的选择框 数据定义 数据初始化,其中list是一个数组,具有唯一的id属性 组件A中定义了计算属性rowSelection 当点击一个按钮之后,触发BatchEdit函数,通过emit抛出新的rowSelection 在父组件中进行事件定义并更新内容 rowS

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

  • 简单来说 controller service dao 三层。 controller 和 service 之间的分层相对比较清晰, 业务逻辑和显示逻辑的拆分, 譬如 MQ/http/RPC 和业务分离。 service 和 dao 的区分我有点搞不懂。主要是因为分不清什么是存储逻辑(非业务逻辑)什么是业务逻辑。 尤其是加入了 manager 层之后。 因为是 python 后端, 所以很自然的将业

  • 为什么只有queryParams变化的时候才会触发watchEffect? watchEffect依赖收集好像是通过访问属性来收集的,queryParams.value访问了属性我理解,loading.value = true 不也访问了属性吗,在后面的then函数里我改变了它的值,但是却不重新执行,虽然从业务逻辑的角度来看不重新执行是对的。 然后我测试了一下,在onSearch里面添加了cons