如何通过变异动态添加状态属性

时间:2019-06-27 15:25:59

标签: javascript vue.js vuex nuxt.js

我想通过突变将属性添加到store.state中。非常简单的示例:

// state.js
export default () => ({
    Prop1: '1',
    Prop2: '2'
})
//mutations.js
export default {
    makeProp (state, anotherProp) {
        return state.anotherProp = anotherProp;
    }
}
// State Client
export default () => ({
    Prop1: '1',
    Prop2: '2',
    anotherProp: 'what ever'
})

一切正常。但是令人讨厌的是,在Vue-Component中似乎不再具有反应性。如果anotherProp获得新值,则组件不会渲染它。

如果我已将anotherProp定义为固定状态,则它是反应性的。我可以想象为什么。我猜测Vue的反应性需要知道其数据,因此它知道要听哪些更改。

但是我该怎么办?我真的需要通过突变添加状态。背景是:

我们实现了数据库管理。因此,如果用户创建新数据库,则vuex存储需要动态地知道这些。所以现在,我们有了一个突变,它为每个数据库创建状态。

有什么办法吗?我还是不知道:D

2 个答案:

答案 0 :(得分:2)

正如刘易斯和vuex mutations rules所说,商店初始化时所有前期恶魔都应该存在。

一个简单的解决方案是初始化一个包含所有所需属性的前期属性。例如:

export default () => ({
  data: {
    Prop1: '1',
    Prop2: '2'
  }
})

执行此操作可以使用:

Vue.set(data, 'anotherProp', 'what ever')

state.data = { ...state.data, 'anotherProp': 'what ever' }

答案 1 :(得分:0)

这里是创建State Property的突变,我尝试整合以使该Prop对Vue具有反应性

更新--------------------------------------------

// mutation.js
import Vue from 'vue'

export default {
    stateUpdate (state, target) {
      Vue.set(state, target.t, target.data);
    },
}

这就是我需要的,因为我在Vuex Store本身(而不是通过组件)中需要mutateset

感谢您的帮助:)