如果我修改数组的各个元素,数组将不起作用

时间:2019-01-27 13:01:40

标签: typescript vue.js vuex

这是Vuex商店内部的一种变异方法。我能够执行注释的代码,并查看组件中的更改,但看不到未注释的部分。

看起来状态只有在我用Array()再次初始化时才是反应性的。否则,尽管状态已更改(如我在上一个控制台中看到的那样),但是我无法看到组件中的更改。

move(state: GameState, vector: Array<number>) {
                //const piece1: Piece = new Piece(7);
                //state.boardState = Array(4).fill(null).map(x => Array(4).fill(null));
                //state.boardState[0][0] = piece1;
                const size = state.boardState.length;
                const xComponent = vector[0];
                const yComponent = vector[1];
                for (let i = 0; i < size - 1; i++) {
                    const shifter = xComponent < 0 ? size - i - 1 : i;
                    const shifterPrev = xComponent < 0 ? size - i - 2 : i + 1;
                    for (let j = 0; j < size; j++) {
                        if (state.boardState[shifter][j] !== null) {
                            if (state.boardState[shifterPrev][j] === null) {
                                state.boardState[shifterPrev][j] = state.boardState[shifter][j];
                                state.boardState[shifter][j] = null;
                            } else if (state.boardState[shifterPrev][j].equals(state.boardState[shifter][j])) {
                                state.boardState[shifterPrev][j].increaseValue();
                                state.boardState[shifter][j] = null;
                            }
                        }
                    }  
                }
                console.log(state.boardState);
            }

2 个答案:

答案 0 :(得分:1)

已解决。

https://vuejs.org/v2/guide/list.html#Array-Change-Detection

VueJS对诸如以下的突变没有反应:

vm.items[indexOfItem] = newValue

必须通过以下方式完成

Vue.set(vm.items, indexOfItem, newValue)

答案 1 :(得分:1)

通常,当使用复杂的对象数组时,我splice将该数组替换为更新的数组。 Vue可以看到更改。