首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pinia w/ Vue3:在模板中使用操作返回funcName不是一个函数

Pinia w/ Vue3:在模板中使用操作返回funcName不是一个函数
EN

Stack Overflow用户
提问于 2021-09-14 20:05:28
回答 1查看 1.5K关注 0票数 2

在Vue3中使用模板内的Pinia操作

Uncaught:$setup.storeName.actionName不是函数

我是做错了什么事还是被期望的行为。似乎没有其他人有同样的问题。谷歌搜索没有透露任何信息。

我正在使用新的组件

EN

回答 1

Stack Overflow用户

发布于 2022-04-27 21:04:36

当我错误地尝试用storeToRefs分解操作以及状态和getter时,我遇到了这种情况,在没有仔细阅读半夏医生的这一点之后:

为了在保持其反应性的同时从存储中提取属性,您需要使用storeToRefs()。它将为每个反应性属性创建参考文献。当您只使用存储区的状态,而不调用任何操作时,这是非常有用的。注意,您可以直接从商店添加的命令中分解操作,因为它们也绑定到商店本身。

所以考虑到这个模板-

代码语言:javascript
复制
<template>
  <ul>
    <li v-for="thing in things" :key="thing">{{ frob(thing) }}</li>
  <li>
</template>

-还有这家商店-

代码语言:javascript
复制
const useStore = defineStore("store", {
  state: () => ({ things: ["1", "2", "3"], }),
  actions: { frob(arg) { return `frobbed ${arg}`; } },
});
const store = useStore();

-如果你试图用thingsfrob同时用storeToRefs来分解,你就会得到TypeError: $setup.frob is not a function。与状态和getter不同的是,应该直接从存储对象中解构操作:

代码语言:javascript
复制
// wrong
const { things, frob } = storeToRefs(store);

// right
const { things } = storeToRefs(store)
const { frob } = store

请注意,在Chrome中,错误将显示为Uncaught (in promise),而在Safari中,错误将显示为Unhandled Promise Rejection

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69183948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档