Vuejs2 Vuex突变时不反应

Vuejs2 Vuex突变时不反应,vuejs2,vuex,Vuejs2,Vuex,我的状态中有一个数组巡更计划,其中包含一个或多个对象 我想做这个东西 tour_plan = [ { day:1, location_id:3, location_name:'Colombo', tour_id:3, tour_name:'City tour' } ] 经过一段时间后,vuex中的文档发现这在vuex突变中不会以反应性方式起作用 state.tour_plan[state.tour_

我的
状态中有一个数组
巡更计划
,其中包含一个或多个对象

我想做这个东西

tour_plan = [
    {
        day:1,
        location_id:3,
        location_name:'Colombo',
        tour_id:3,
        tour_name:'City tour'
    }
]
经过一段时间后,vuex中的文档发现这在vuex突变中不会以反应性方式起作用

state.tour_plan[state.tour_plan.length - 1].tour_id = payload.tour_id;
state.tour_plan[state.tour_plan.length - 1].tour_name = payload.tour_name;
所以我尝试了这两种方法

state.tour_plan[state.tour_plan.length - 1] = { ...state.tour_plan[state.tour_plan.length - 1],
                tour_id: payload.tour
             };

Vue.$set(state.tour_plan[state.tour_plan.length - 1], 'tour_id', payload.tour);
但它们中的任何一个也不起作用。
我的代码中的问题在哪里?

您正确地认识到,在不“破坏”反应性系统的情况下,无法通过索引访问对对象/数组项进行变异

关于您尝试过的内容,根据的文档,它希望作为第一个参数的是整个对象/数组,而不是长度

因此,正确的方式是:

Vue.$set(state.tour_plan, 0, payload.tour);
其中0是要更新(替换)的元素的索引。

这对我来说很有效

   Vue.set(state.tour_plan[state.tour_plan.length - 1], 'tour_id', payload.tour)
   Vue.set(state.tour_plan[state.tour_plan.length - 1], 'tour_payment', payload.tour_payment)
   Vue.set(state.tour_plan[state.tour_plan.length - 1], 'tour_name', payload.tour_name)

谢谢你的提示,在你的回答的帮助下,我找到了一个方法。
   Vue.set(state.tour_plan[state.tour_plan.length - 1], 'tour_id', payload.tour)
   Vue.set(state.tour_plan[state.tour_plan.length - 1], 'tour_payment', payload.tour_payment)
   Vue.set(state.tour_plan[state.tour_plan.length - 1], 'tour_name', payload.tour_name)