vuex模块无法将元素添加到根状态

时间:2019-08-22 10:46:37

标签: vue.js vuejs2 vuex vuex-modules

我想从vuex中的模块将元素推送到根目录中的状态。 但我得到一个错误:rootState.artists.push不是功能。

//in root state store.js
state:{
artists:[]
},
modules:{
artists,
}
//in module artists.js
return firestore().collection('artists').limit(15).get()
                    .then((snapshot) => {
                        let artists = [];
                        snapshot.forEach(doc => {
                            artists.push({...doc.data(), id: doc.id })
                        });
                        rootState.artists.push(...artists);
                    }).catch((err) => {
                        console.log(err);
                    });

我希望应该填充处于根状态的艺术家数组,但是我得到rootState.artists.push不是函数。

1 个答案:

答案 0 :(得分:0)

您应该保持变异同步,也不要在行动中改变状态。考虑重构代码。

另一个问题是您的模块状态确实取代了rootState artists

示例:

// in store.js
state:{
  artists:[]
},

mutations: {
  updateArtists(state, artists) {
    state.artists.push(...artists);
  },
},

modules:{
  artistsModule,
}

// in artistsModule.js
actions: {
  updateArtists(context) {
    firestore().collection('artists').limit(15).get()
      .then((snapshot) => {
        let artists = [];
        snapshot.forEach(doc => {
          artists.push({...doc.data(), id: doc.id })
        });
        context.commit('updateArtists', artists, { root: true });
      }).catch((err) => {
        console.log(err);
      });
  }
}