Массив не реагирует, если я изменяю отдельные его элементы - PullRequest
0 голосов
/ 27 января 2019

Это метод мутации в магазине Vuex. Я могу сделать закомментированный код и увидеть изменения в компоненте, но не в части без комментариев.

Похоже, что состояние является реактивным, только когда я снова инициализирую его с помощью Array (). В противном случае я не смогу увидеть изменения в компоненте, хотя состояние изменилось, как я вижу в последнем файле console.log

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 голосов
/ 28 января 2019

Обычно при работе со сложным массивом объекта я splice массив и заменяю его обновленным.И Вью видит изменения.

0 голосов
/ 27 января 2019

Решено.

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

VueJS не реагирует на мутации, такие как:

vm.items[indexOfItem] = newValue

Это должно быть сделано как:

Vue.set(vm.items, indexOfItem, newValue)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...