Система реактивности Vue (но я полагаю, что я могу распространить ее на все другие реактивные рамки / lib / что угодно) - это просто реализация шаблона наблюдателя . В конкретном случае функция наблюдателя запускается при изменении значения свойства (данные, вычисленный результат получения, состояние vuex). если свойство является целым числом и его значение равно 2, легко проверить, что в какой-то момент оно стало «3», после сравнения с мутацией , vdom change и т.д ... и то же самое для других примитивных типов. Когда структурированный объект вступает в игру, сравнение между значениями все еще выполняется, но на этот раз значение будет ссылкой на объект. Если ссылка не меняется, vue не может знать, что что-то изменилось, поэтому просто не реагирует ....
если вы установите val [3] = 'foo' до и val [3] = 'bar' после, массив 'val' останется тем же объектом в той же области кучи, поэтому вы должны его клонировать, или лучше используйте Vue.set ()