在nuxt中遇到此错误:[vuex]不要在突变处理程序之外对vuex存储状态进行突变

时间:2019-04-13 15:37:40

标签: vue.js vuex nuxt.js wavesurfer.js

我正在使用nuxt.js,我想将当前歌曲时间传递给vuex。

但是传递数据只能工作一次。

这是我的数据

currentSongTime: {
          second: 0,
          minute: 0,
          total: 0
        }

已安装:

this.WaveSurfer.on('seek', (position) => {
        this.currentSongTime.second = parseInt(position * this.WaveSurfer.getDuration() % 60);
        this.currentSongTime.minute = parseInt((this.WaveSurfer.getCurrentTime() / 60) % 60);
        this.currentSongTime.total = parseInt(position * this.WaveSurfer.getDuration());

        this.$store.commit('setCurrentSongTime', this.currentSongTime);
      });

index.js(vuex):

export const state = () => ({
  currentAudioTime: {}
});

export const mutations = {
  setCurrentSongTime(state, val) {
    state.currentAudioTime = val;
  }
};

它只工作一次,然后,我收到此错误消息:

[vuex] do not mutate vuex store state outside mutation handlers.

我不知道该怎么办?

1 个答案:

答案 0 :(得分:1)

您直接将组件数据设置为Vuex状态,这会导致问题,因为在修改组件数据时,您还直接在突变处理程序之外对状态进行了突变。一种快速解决方案是在将其分配为vuex状态之前克隆该对象:

this.$store.commit('setCurrentSongTime', JSON.parse(JSON.stringify(this.currentSongTime)));