带参数的vuexjs getter

有没有一种方法可以将参数传递给getter vuex store就像是:

new Vuex.Store({
  getters: {
    someMethod(arg){
       // return data from store with query on args
    }
  }
})

这样在组件中我可以使用

<template>
    <div>
        <p>{{someMethod(this.id)}}</p>
    </div>
</template>
<script lang="ts">
    import { mapGetters } from "vuex"

    export default {
        props: ['id'],
        computed: mapGetters(['someMethod'])
        }
    }
</script>

但是在vuex中,第一个参数是state,第二个参数是other getters可能吗?

十三神无2020/03/12 14:44:51

ES6箭头功能在这里也可以很好地工作。例如,假设您要在商店中寻找特定的“东西”。

new Vuex.Store({
  getters: {
    someMethod: (state) => (id) => {
        return state.things.find(thing => thing.id === id)
      }
    };       
  }
})

这是Vuex文档中的另一个示例

理查德Itachi2020/03/12 14:44:51

一种方法是:

new Vuex.Store({
  getters: {
    someMethod(state){
      var self = this;
       return function (args) {
          // return data from store with query on args and self as this
       };       
    }
  }
})

但是,getter不接受参数,并且在此线程中解释了为什么

命名约定有些混乱,getter表示状态可以以任何形式检索,但实际上它们是简化器。

也许我们应该让减速器成为纯粹的方法。可用于过滤,映射等。

然后可以给getters任何上下文。与compute类似,但是您现在可以在vuex选项中将compute的props组合到getter。这有助于组件的结构。

编辑:

实现相同目标的更好方法是使用nivram80的答案中详细介绍的ES6箭头,使用方法样式的getter,您可以通过从getter返回函数来传递参数:

new Vuex.Store({
  getters: {
    someMethod: (state) => (id) => {
        return state.things.find(thing => thing.id === id)
      }
    };       
  }
})