搜索

首页  >  问答  >  正文

无法使Vuex的getter等与Vue3的<script setup>组合API一起正常运行

如果我在Vue 3中使用组合API并且像下面这样使用常规的setup()方法,我可以让它工作:

<script>
  import { useStore } from 'vuex'
  import { computed } from 'vue'

  export default {
    const store = useStore()

    setup () {
      const loginStatus = computed(() => store.getters.loginStatus)

      return { loginStatus }
    }
  }
</script>

loginStatus现在在模板中可用并且可以在html中使用。

但是当我尝试使用较新的<script setup>语法时,const不再被捕捉并暴露给模板。

我不应该从script setup中返回任何内容,但它也不会自动发生。Eslint将loginStatus标记为未使用。我找不到有关如何在此上下文中使用Vuex的任何信息:

<script setup>
  import { useStore } from 'vuex'
  import { computed } from 'vue'
  const store = useStore()

  const loginStatus = computed(() => store.getters.loginStatus)
</script>

这个预期是不会工作的吗?或者你知道推荐的做法吗?

编辑1:

我知道这个答案,其中接受的解决方案不是推荐的组合API语法,第二个答案涉及编写自己创建的样板代码,使我想做的事情成为可能,但似乎不是官方的方式(如果有的话)。

编辑2:

正如评论者指出的那样,我的代码实际上是有效的。但是,我被Vetur扩展标记为未返回的变量所欺骗。所以在模板中它对我来说看起来像是它没有被捕捉到的原因。实际上,与此无关的错误才是真正的原因。

因为这个Vetur问题,我暂时还是使用旧的setup语法。

P粉903969231P粉903969231292 天前465

全部回复(2)我来回复

  • P粉842215006

    P粉8422150062024-03-26 14:39:27

    我一直在尝试

    import { computed } from 'vue';
    import { useStore } from 'vuex';
    
    const store = useStore();
    
    const con = computed(() => store.getters.connected);

    在这种情况下,connected只是一个布尔值,但我也尝试过使用对象,它仍然有效。

    我的模板:

    <template>
      <h1>{{ con }}</h1>
    </template>

    它运行得很好。

    回复
    0
  • P粉446800329

    P粉4468003292024-03-26 11:14:59

    你在 <script setup> 中的用法实际上是 有效的,但正如在 评论中指出的Vetur VS Code 扩展 显示了误导性的错误。

    从 0.34.1 版本开始,Vetur 不支持 <script setup>。推荐使用 <script setup> 的扩展是 Volar。这甚至是从 Vue 的官方 Twitter 账号 昨天发布的推文

    回复
    0
  • 取消回复