布尔数据似乎在 vue 3 中的 vue 反应中表现得很奇怪

Posted

技术标签:

【中文标题】布尔数据似乎在 vue 3 中的 vue 反应中表现得很奇怪【英文标题】:Boolean data seems acting weirdly in vue's reactivity in vue 3 【发布时间】:2021-10-21 01:54:42 【问题描述】:

我正在尝试更改数据类型为 'boolean' 的变量。首次加载页面时,数据运行良好。但是,当页面重新加载时,变量会在方法中本地更新,但不会在全局数据部分中更新。因此,在控制台中,我不断收到错误 "Uncaught (in promise) TypeError: Cannot read property 'value' of undefined at invokeDirectiveHook"

有什么我错过的吗?

<template>
  <p>Value:  val </p>
  <button @click="changeMe">Click Me</button>
</template>

<script>
import  ref  from 'vue';

export default 
  data() 
    return 
      val: ref(false);
    ,
  ,
  methods: 
    changeMe() 
      this.val = !this.val;
    
  

</script>

【问题讨论】:

【参考方案1】:

请不要将options API 与composition API 混用

选项 API

Vue.createApp(
  data() 
    return 
      val: false
    
  ,
  methods: 
    changeMe() 
      this.val = !this.val
    
  
).mount('#demo')
<script src="https://unpkg.com/vue@next"></script>

<div id="demo" class="demo">
  <p>Value:  val </p>
  <button @click="changeMe">Click Me</button>
</div>

组合 API

const  createApp, ref  = Vue;
const app = createApp(
  setup() 
    let val = ref(false)
    
    function changeMe() 
      val.value = !val.value
    

    return 
      val,
      changeMe
    
  
);
app.mount("#app");
<script src="https://unpkg.com/vue@next"></script>
<div id="app">
   <p>Value:  val </p>
  <button @click="changeMe">Click Me</button>
</div>

组合 API(短)

// Composition API
<template>
  <p>Value:  val </p>
  <button @click="changeMe">Click Me</button>
</template>

<script setup>
import  ref  from 'vue'

const val = ref(false)

function changeMe() 
 val.value = !val.value

</script>

&lt;script setup&gt; 现在包含在3.2 version 中

【讨论】:

以上是关于布尔数据似乎在 vue 3 中的 vue 反应中表现得很奇怪的主要内容,如果未能解决你的问题,请参考以下文章

在设置选项内的 axios 响应回调中更新反应数据 - Vue 3

如何在 Vue js 中使 localStorage 中的数据具有反应性

解析对象数组在 (Nativescript) Vue 中不是反应式的

为每一行分配一个带有增量整数的名称,以区分 Vue.js 中表中的行

vue composition api中的反应性数据未在模板中呈现

Vue.js 3 - 替换/更新反应性对象而不会失去反应性