在vue 3v上-如果不能处理从composable返回的ref值

elcex8rz  于 2023-06-24  发布在  Vue.js
关注(0)|答案(1)|浏览(137)

我创建了一个具有React布尔值的组合。出于某种原因,reactive boolean只适用于模板v-if中的.value。它不会在模板中自动打开它。
但是如果我直接在vue组件上使用布尔引用,它就可以工作了。我复制了here
代码:

// useToggle.ts file
import { ref } from "vue";

const visible = ref(true);

export function useToggle() {
  function toggle() {
    visible.value = !visible.value;
  }

  function close() {
    visible.value = false;
  }

  return {
    visible,
    toggle,
    close,
  };
}

// App.vue file
<script setup lang="ts">
import { ref } from "vue";
import { useToggle } from "./useToggle";

const visible = ref(true);
const t = useToggle();
</script>

<template>
  <button @click="visible = !visible">toggle local</button>
  <div v-if="visible">local</div>

  <button @click="t.toggle">toggle global without value</button>
  <div v-if="t.visible">global (this doesn't work)</div>
  <div v-if="t.visible.value">global (this doesn't work)</div>

  {{t.visible}} (but this, updates)

</template>

我不明白为什么V-IF不能正常工作。我能做些什么来使可组合的工作像本地引用一样?

ujv3wf0j

ujv3wf0j1#

仅当ref是模板渲染上下文上的顶级属性时,才应用展开。如果ref是文本插值的最终计算值,则它也将被展开。
https://vuejs.org/guide/essentials/reactivity-fundamentals.html#ref-unwrapping-in-templates

相关问题