Vue: Подъем vnode - предупреждение о бесконечном цикле

Созданный на 15 сент. 2017  ·  3Комментарии  ·  Источник: vuejs/vue

Версия

2.4.4

Ссылка для воспроизведения

http://jsfiddle.net/vjvMp/2019/

Действия по воспроизведению

Точная компоновка компонентов находится в JSFiddle. Сборка компонентов по какой-то причине очень хрупкая, что заставляет меня думать, что это ошибка. Например, если я удалю самый верхний компонент layout который не должен влиять на код, предупреждение исчезнет: http://jsfiddle.net/vjvMp/2020/

Что ожидается?

Чтобы слот на дочернем элементе можно было без проблем поднять до родителя и отрисовать над ним.

Что на самом деле происходит?

Дочерний объект отображается, но появляется предупреждение о бесконечном цикле обновления.

Самый полезный комментарий

  • Вы возвращаете API из data , это делает объект while api реактивным
  • Когда вы устанавливаете vnode в API, который заставляет Vue пытаться преобразовать vnode
  • В 2.4.3 узлы слотов теперь глубоко клонируются при повторном рендеринге для исправления некоторых ошибок, это заставляет функцию рендеринга регистрировать весь vnode как реактивную зависимость, поэтому изменение vnode запускает повторный рендеринг.

На данный момент вашим обходным путем может быть Object.freeze vnode или не делать инъекцию api реактивной.

Все 3 Комментарий

Код работал на v2.4.2 ; похоже, что он был представлен в v2.4.3.

  • Вы возвращаете API из data , это делает объект while api реактивным
  • Когда вы устанавливаете vnode в API, который заставляет Vue пытаться преобразовать vnode
  • В 2.4.3 узлы слотов теперь глубоко клонируются при повторном рендеринге для исправления некоторых ошибок, это заставляет функцию рендеринга регистрировать весь vnode как реактивную зависимость, поэтому изменение vnode запускает повторный рендеринг.

На данный момент вашим обходным путем может быть Object.freeze vnode или не делать инъекцию api реактивной.

Фикс отлично работает! Спасибо @ yyx990803

Была ли эта страница полезной?
0 / 5 - 0 рейтинги