Есть ли хороший способ отлаживать вычисляемые свойства и шаблоны vuejs?

У меня есть некоторые проблемы с отладкой vuejs, например, с отладкой вычисляемых свойств или значений данных в шаблонах и т. д.

Прямо сейчас я использую метод IIFE для его отладки, который упоминается в https://vuedose.tips/tips/debugging-templates-in-vue-js/ :

<h2 dir="auto">
  {{(function(){debugger;let temp = headerMessage})()  ||  headerMessage}}
</h2>

и большая проблема, с которой я столкнулся, связана с исходной картой в chrome для отладки в файлах vue, как показано на рисунке ниже, слишком много дубликатов с разными кодами из одного файла (эта панель.vue, показанная ниже, не та, что у меня есть в мой проект, это может быть визуализированная версия или что-то еще, чего я не хочу видеть, я просто хочу увидеть реальный файл panel.vue, чтобы лучше работать с ним):

введите здесь описание изображения

Как решить эту проблему и есть ли способ правильно отлаживать такие части в vuejs, например, использовать точку останова?


person SeyyedKhandon    schedule 27.01.2020    source источник


Ответы (4)


Для отладки проблем с шаблонами я обычно рекомендую переносить любую сложную логику в метод. Оттуда легко отладить с помощью типичных инструментов.

Проблемы с вычислениями Vue обычно делятся на три лагеря:

<сильный>1. Вы отлаживаете какую-то сложную логику в вычисляемом

В этом случае попробуйте перенести сложность в метод и просто вызвать его из вычисляемого. Затем вы можете использовать debugger, console.log и точки останова, как вам больше нравится.

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

<сильный>2. Ваша логика довольно проста, но работает не так, как ожидалось

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

Вы можете получить доступ к любым данным/реквизитам/вычислениям непосредственно на $vm, например $vm.myProp.

Обратите внимание, что вы должны выбрать компонент в devtools для установки $vm.

<сильный>3. Расчетное значение зависит от реактивности, но не меняется

Здесь мой подход часто совпадает с № 2.

Есть ли опечатки в названиях реактивных элементов, от которых вы зависите? Если что-то всегда оценивается как ложное, это может быть связано с тем, что опечатка относится к несуществующему свойству и возвращает undefined (ложь).

Кроме того, если вы зависите от изменения вложенного состояния данных или реквизита, убедитесь, что вы используете Vue.set / this.$set в зависимости от ситуации.

person Matt Sanders    schedule 17.03.2021

Я предлагаю вам использовать vue-dev-tools. Расширение для браузера, позволяющее проверять компонент за компонентом data, computed и многое другое.

Его можно загрузить и установить из любого магазина расширений для браузера: Chrome, Mozilla и т. д.

Репозиторий Vue Dev Tool.

введите здесь описание изображения

person Toodoo    schedule 27.01.2020
comment
спасибо, я на самом деле использую его, но этого недостаточно и не решает проблему. потому что у него нет такой возможности точки останова и так... - person SeyyedKhandon; 27.01.2020
comment
То же самое здесь, удобно проверять данные, но не логику AFAIK - person Carles Alcolea; 17.12.2020
comment
В vue2 вы можете открыть инструменты разработки и с помощью вкладки элементов выбрать элемент dom вашего компонента. Затем нажмите клавишу esc на клавиатуре, чтобы отобразить консоль. Введите $0.__vue__, и вы сможете получить доступ к экземпляру vue вашего компонента, включая вычисляемые свойства. - person hitautodestruct; 28.12.2020
comment
Мне это очень помогло: try { .. } catch(e) { console.log(e); }. Попробуйте также переместить оператор return, чтобы обойти проблему. - person Abdellah GRIB; 24.02.2021

В дополнение к тому, что сказал @Toodoo, чтобы вычисляемое свойство отображалось в разделе с данными и переменными, ваше вычисляемое свойство должно отображаться в списке экспортируемых свойств, то есть возвращаться в конце вашей настройки.

return {Component1, data, ComputedProp }

и тогда он будет отображаться как вычисленный

введите здесь описание изображения

Другими словами, то, что вы выставляете/экспортируете для просмотра приложением, вы делаете с инструментами разработки (это важная деталь).

person Rub    schedule 08.03.2021

Для меня это очень помогло внутри вашего вычисленного add :

try { ... } catch(e) { console.log(e); }.

Попробуйте также переместить свой оператор return, чтобы окружить проблему и сделать сомнительный код внутри блока try.

person Abdellah GRIB    schedule 24.02.2021