一个关于Vue3响应式数据的问题

问题描述

但是在下列程序中,当我点击按钮1的时候,非响应式的数据发生了改变。而当我点击按钮2的时候非响应式的数据没有发生改变。这到底是什么原因引起的呢?

问题代码展示

<template>
  <div>
 <h3>k:{{k}}-------------b:{{b}}</h3>
 <button @click="event1">按钮1</button>
 <button @click="event2">按钮2</button>
  </div>
</template>

<script setup lang="ts">

import {ref} from "vue";

// 非响应式的数据
let k = 1
// 响应式的数据
let b =ref(1)

function event1() {
  k+=1
  b.value+=1
  console.info(k, b)
}

function event2() {
  k+=1
  console.info(k)
}
</script>
ref
JaguarJack
最佳答案

event1ref 变量变化,导致了视图更新,所以非响应式变量也发生了变化.
第二个 ref 变量没有变化,所以没有产生视图变化,非响应式变量也不会产生变化。
如果你点击 event2 之后,虽然当时视图的 k 没有变化,但是你再去点击 event1 时候,k 是不是就是点击过 event2 后的值了呢?

1年前 评论
J-TIGGER (楼主) 1年前
讨论数量: 5

变了,但没有实时显示变化

1年前 评论
J-TIGGER (楼主) 1年前
JaguarJack

event1ref 变量变化,导致了视图更新,所以非响应式变量也发生了变化.
第二个 ref 变量没有变化,所以没有产生视图变化,非响应式变量也不会产生变化。
如果你点击 event2 之后,虽然当时视图的 k 没有变化,但是你再去点击 event1 时候,k 是不是就是点击过 event2 后的值了呢?

1年前 评论
J-TIGGER (楼主) 1年前

可以加在 event2 加一个 setTimeout 延迟

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!