Проблема реактивности в VueJs - ненужные обновления - PullRequest
1 голос
/ 07 августа 2020

У меня есть приложение Vue, которое отображает вложенную древовидную структуру данных. В структуре есть только два случая - логические значения на листьях дерева и записи значений ключа как внутренние узлы дерева.

Логический случай внутренне кодируется как { type: 'bool', value: <boolean value> } запись. Регистр записи имеет внутреннюю кодировку { type: 'record', value: <js object> }. Поле 'type' упрощает диспетчеризацию между Vue компонентами для визуализации конкретного случая:

https://codesandbox.io/s/vue2-reactivity-issue-kbg4c

Логический компонент case позволяет переключать значение логического значения, щелкнув по нему.

Теперь предположим, что отображается следующая структура:

record({
  a: record({ a1: bool, a2: bool }),
  b: bool,
  c: bool,
  d: record({ d1: bool, d2: bool })
});

Когда я нажимаю на bool, соответствующее полю "a1", я вижу, что " Компоненты a1 "и" a2 "обновляются. Я вставил трассировку в ловушку "обновленного" компонента, поэтому в консоли видно, какие компоненты обновляются.

Когда я нажимаю на bool, соответствующее полю "b", каждые компоненты в приложении обновляются - даже самые вложенные компоненты, такие как «d1» и «d2».

Это кажется мне ненужным обновлением. Почему они случаются и как этого избежать?

1 Ответ

0 голосов
/ 07 августа 2020

Хорошая отправная точка для начала - это статья https://vuejs.org/v2/guide/reactivity.html

Первая проблема, с которой вы связываете bool объект по всему состоянию.

Второй которые вы изменяете полностью, укажите каждую мутацию.

https://codesandbox.io/s/vue2-reactivity-issue-ocy0h

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...