凡小多 2023-01-12 11:26 采纳率: 50%
浏览 45

关于#vue.js#vue3使用ref包裹boolean类型的值时,改变值,视图有时候会刷新,但有时候不会,如何解决?

vue3使用ref包裹boolean类型的值时,改变值,视图有时候会刷新,但有时候不会
<template>
  <el-button @click="changeFlag">改变</el-button>
  {{ flag }}
  <hr class="mtb20">
  <B v-if="flag"></B>
</template>

<script setup lang="ts">
import { ref } from 'vue';
import B from '@/components/B.vue';

const flag = ref<boolean>(true)

const changeFlag = () => {
  flag.value = !flag.value
  console.log('flag :>> ', flag.value);
}

</script>

数据变化正常,但组件显示隐藏正常,但flag展示的数据视图变化有问题,视图不变,但有时刷新页面点击后flag视图又可以变
希望知道为什么会出现这一情况,出现情况的原因
  • 写回答

2条回答 默认 最新

  • m0_54204465 2023-01-12 12:40
    关注

    Vue.js 使用 "ref" 包裹 boolean 类型的值时,改变值后视图有时候会刷新,但有时候不会,这是因为 Vue 依赖检测系统是基于 JavaScript 的浅比较来检测数据变化的。当你使用 "ref" 包裹 boolean 类型的值时,Vue 无法检测到变化,因为你修改的是同一个内存地址中的值,而不是新建一个对象。

    为了解决这个问题,可以在修改 boolean 类型的值时使用 "set" 方法,这样 Vue 依赖检测系统就能检测到数据变化了。

    示例代码:

    const flag = ref<boolean>(true)
    const changeFlag = () => {
    flag.value = !flag.value
    console.log('flag :>> ', flag.value);
    }
    
    修改为
    
    const flag = ref<boolean>(true)
    const changeFlag = () => {
    flag.value = !flag.value
    flag.value = flag.value
    console.log('flag :>> ', flag.value);
    }
    
    

    修改为

    const flag = ref<boolean>(true)
    const changeFlag = () => {
    flag.value = !flag.value
    flag.value = flag.value
    console.log('flag :>> ', flag.value);
    }
    
    

    或者

    const flag = ref<boolean>(true)
    const changeFlag = () => {
    flag.value = !flag.value
    flag.set(flag.value)
    console.log('flag :>> ', flag.value);
    }
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 1月12日

悬赏问题

  • ¥15 求帮生成一个lattice diamond的许可证
  • ¥15 大一前端新生求教学解答
  • ¥15 如何制作一个可以查看“网游有序列的装备词条”的软件/插件
  • ¥15 CS2打5E与完美天梯匹配会与服务器断开连接(黑框没标明具体原因)
  • ¥15 利用cst反推材料电磁参数,推出想x,y,z方向的相对介电常数与磁导率
  • ¥15 求帮助!用赛灵思FPGA XC7A35T对一个频率50MHz的数字信号读取高低电平,只用HR bank普通单端io进行采样可以吗
  • ¥15 训练准确率100%,测试准确率只有50%
  • ¥15 grafana创建dashhabord提示no data sources of type Prometheus Alert
  • ¥15 python用arima时间序列法预测不出结果 急
  • ¥15 思科交换机如何恢复配置