在模板中时无法访问 Vue 商店中的 getter,因为它“不是函数”

Posted

技术标签:

【中文标题】在模板中时无法访问 Vue 商店中的 getter,因为它“不是函数”【英文标题】:Can't access getters in the store for Vue when in a template because it "is not a function" 【发布时间】:2022-01-17 04:01:19 【问题描述】:

我是 vue 和 vuex 的新手,我也在使用 Nuxt。我想在我的模板中使用一个函数来搜索我从 API(在 vuex 中)获取的一些数据。我不明白为什么我总是得到

state.allHandhelds.values.findIndex is not a function

我的模板是这样的:

<div> handheldID("Form Factor") </div>

在我的计算中,我这样调用函数:

 computed: 
    ...mapGetters(["allHandhelds"]),
    handheldID(merkmal) 
      return this.$store.getters.indexFinder(merkmal);
    ,
  ,

在 vuex 中,我将其定义为 getter:

export const getters = 
   indexFinder(state, merkmal) 
    return state.allHandhelds.values.findIndex(
      (el) => el === merkmal
    ); /* Index des Merkmals finden */
  ,
;

知道我哪里出错了吗?

【问题讨论】:

【参考方案1】:

您必须使用方法访问样式,例如:

export const getters = 

 indexFinder: (state) => (merkmal) => 
      return state.allHandhelds.values.findIndex(
         (el) => el === merkmal
    ); 
  
;

或语法:

export const getters = 
   indexFinder(state) 
    return (merkmal)=> 
       return state.allHandhelds.values.findIndex(
      (el) => el === merkmal
    ); /* Index des Merkmals finden */
     
,
;

【讨论】:

那行不通。不幸的是,我仍然收到“state.allHandhelds.values.findIndex 不是函数”错误 请分享您如何定义状态 数据加载有问题。如果我只是从 getter 返回“return state.allHandhelds.values”,它可以工作,如果我之后附加 .findIndex 它也可以工作,但是一旦我重新加载页面,它就会再次中断。是不是因为我的商店里也有一个 fetch ,所以获取了数据? export const actions = fetchAllHandhelds(context) return fetch(URLisHERE) .then((response) =&gt; response.json()) .then((data) =&gt; context.commit("setHandhelds", data); ) .catch((err) =&gt; console.error(err)); , ; 我这样定义状态:export const state = () =&gt; ( allHandhelds: [], ); 根据状态你应该做state.allHandhelds.findIndex(

以上是关于在模板中时无法访问 Vue 商店中的 getter,因为它“不是函数”的主要内容,如果未能解决你的问题,请参考以下文章

无法在模块之外访问 Vuex getter

Vue/Nuxt:如何在 vuex 商店中访问 Nuxt 实例?

TypeError:无法读取未定义的属性“getters”

状态渲染前的 Vue.js/vuex getters 错误

访问 js 文件中的 vuex 存储

当它们不在服务器中时,如何删除商店中的记录