vue.js - Vuex - 将状态克隆到数据对象属性中,无法删除数组项

标签 vue.js vuejs2 vue-component vuex

我已经将我的状态从 Vuex 克隆到我的组件 data() 中的数组。我的问题是,当我尝试使用 shift() 从我的克隆中删除数组中的第一项并使用 unshift() 将其添加回来时,我收到此错误消息:

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

如何删除克隆状态中不影响实际状态本身的内容?

保存/克隆

    beforeMount () {
        this.traningArea = this.stateExercises
    },
    computed: {
        ...mapState({
            userStore: state => state.userStore,
            tsStore: state => state.trainingSchemeStore
        }),
        stateExercises () {
            return this.tsStore.schemeExercises
        }
    }

尝试在点击时运行 shift() 并在用户再次点击时尝试运行 unshift()

this.traningArea[0].shift()
this.traningArea[0].unshift(obj)

我在这里遇到了这个错误。

状态

const state = {
    trainings: []
}

const actions = {
    getTrainingExercise: ({commit}, ids) => {
        var payload = {
           'trainings_id': ids
        }

        return Vue.http.post(getTrainingsById, payload, 
        {headers: getHeader()})
        .then(response => {
            if (response.status === 200) {
                commit('SET_TERL', response.body.data)
            }
        })
  },

const mutations = {
    SET_TERL(state, trainings) {
       state.trainings.push(trainings)
    }
}

最佳答案

我希望我不会误解你,所以我认为解决方案是这样的:

  const mutations = {
      SET_TERL(state, trainings) {
       state.trainings.push(trainings)
      },
       SHIFT(state, index) {
       state.trainings[index].shift() 
      },
     UNSHIFT(state, index,obj) {
       state.trainings[index].unshift(obj) 
      }
   } 

当您调用该方法时:

 this.tsStore.commit("SHIFT",0);

  this.tsStore.commit("UNSHIFT",0,obj); 

关于vue.js - Vuex - 将状态克隆到数据对象属性中,无法删除数组项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52783907/

相关文章:

vue.js - watch 和 $watch 的区别

Vue.js:从api获取数据并将其传递给子组件(简单示例)

javascript - Laravel Vue.js 事件未触发

javascript - 如何在vuejs中状态更改时验证条件

typescript - 如何在VueJS 3.0 中使用defineComponent 注册本地组件

javascript - 如何在 vue.js 2 上使用 ajax 上传图片?

vue.js - 如何使用 vue.js 和 element-ui 的文件上传组件在上传到服务器之前预览文件?

javascript - 如何在 Vue.js 中使用从一个钩子(Hook)到另一个钩子(Hook)的数据?

javascript - 如何循环访问 VueJS 中的组件列表

javascript - VueJS : Run function in parent component when event triggered in child component