为什么Vuex状态将数组作为对象返回

时间:2018-06-08 04:47:25

标签: typescript vue.js vuex

我使用的是Typescript + vue + vuex,状态定义为

const state: CommonDataState = {
  clients: [],
  version: 1
}

吸气者是

const getters: GetterTree<CommonDataState, RootState> = {
  getClients: state=> () => { return state.clients; },
  getClientById: state => (id: string) => { return state.clients.filter(x => true)[0]; },
  getVersion: state => (): Number => { return state.version; }
}

调用getter getClientById时,

  

渲染错误:&#34; TypeError:state.clients.filter不是函数&#34;

当我使用console.log()打印state.clients时,它显示结果是一个对象,其默认属性为数组而不是数组类型

{__esModule: true, __ob__: Observer}
default : Array(15)
__esModule : true
__ob__ : Observer {value: {…}, dep: Dep, vmCount: 0}
get default : ƒ reactiveGetter()
set default : ƒ reactiveSetter(newVal)
__proto__ : Object

默认值是正确的数组。 但是,当我尝试将吸气剂更改为

  getClientById: state => (id: string) => { return state.clients.default.filter(x => true)[0]; },

它返回错误

  

[ts]财产&#39;默认&#39;类型&#39;客户端[]&#39;。

上不存在

那么,有谁知道导致此错误的原因是什么?对此有什么解决方案吗?

1 个答案:

答案 0 :(得分:0)

尝试更改此结构

import { GetterTree, Getter } from 'vuex'
import { State } from './index'

const cartProducts: Getter<State, any> = (state: State) => {
  return state.cart.added.map(shape => {
    // ...
  })
}

const getterTree: GetterTree<State, any> = {
  cartProducts
}

export default getterTree