<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(true)
const changeFlag = () => {
flag.value = !flag.value
console.log('flag :>> ', flag.value);
}
script>
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);
}
你好,你这个页面的写法没有问题,你说数据变化正常,组件的显示隐藏也正常,只是组件里边的视图显示异常?那可以看一下子组件里边的代码嘛?应该是子组件写法问题