Рубрики
Без рубрики

Почему вы должны избегать шаблонов Vue.js dom

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

Автор оригинала: Anthony Gore.

Это обычная практика для приложения Vue для использования DOM в качестве шаблона, так как это самая быстрая и простая архитектура для настройки.

Эта практика поставляется с несколькими уловами, однако, что делает его нежелательным выбором для любого серьезного проекта. Например, разметку, которую вы пишете для шаблона DOM, не всегда то, что вы получаете, когда ваш приложение работает.

В этой статье я объясню проблемы с использованием DOM как шаблона и предложить некоторые альтернативы.

Примечание: эта статья была первоначально опубликована здесь на блоге разработчиков Vue.js на 2017/09/18.

Дом как шаблон

Эль Опция используется для монтажа экземпляра VUE к элементу в DOM. Если нет Шаблон или оказывать Вариант присутствует, Vue будет использовать любой существующий контент в монтажном элементе в качестве шаблона.




  
    
    title
  
  
    

My Vue.js App

{{ message }}

new Vue({
  el: '#app',
  data: {
    message: 'Hello world'
  }
});

Этот подход быстро поднимает вас и работает, но вы должны перейти от него, потому что:

  • Разметки вы пишете не всегда то, что вы получаете
  • Синтаксические столкновения с шаблонными двигателями
  • Несовместимость с рендерингом на стороне сервера
  • Требуется компиляция шаблона выполнения

Разметка

Давайте сделаем различие между Марка и Дом Отказ Markup – это HTML, который вы пишете. Браузер тогда проанализирует это и включает его в DOM.

Vue использует DOM как шаблон, а не маркировка, которую вы пишете. Почему это проблема? Парсер Дома и Vue не всегда согласны с тем, что является приемлемой разметкой. Нестандартная разметка может быть изменена или удалена со страницы, вызывая непредсказуемые результаты.

Например, у вас может быть пользовательский компонент мой ряд что делает как TR И будет логически использоваться так:

Так как только TR разрешено внутри Таблица браузер будет поднимать мой ряд Элемент над таблицей во время его анализа документа. К тому времени Vue Runs вы будете иметь это:


Существуют также крутые нестандартные функции для шаблонов Vue, которые DOM Parser откроется:

Самозаменяющиеся теги: Если ваш компонент не нужен слот, VUE позволяет сделать его самозакрывающимся элементом.



Компоненты Non-Kebab-Cound: HTML является нечувствительным к регистру, что означает, что вы ограничены компонентами Cebab-Case в шаблоне. Vue будет счастливо принять камеру или Pascalcase, хотя. То же самое с реквизитом.



Ни один из этих проблем не происходит, если вы используете строковые шаблоны (или функции рендеринга), поскольку парсер DOM не является фактором.

Столкновение с шаблонными двигателями

Если вы используете Vue.js в сочетании с шаблонным двигателем, любой общий синтаксис может быть проблематичным.

Например, руль и лезвие Laravel используют двойные фигурные брекеты {{}} Синтаксис, который Vue использует. Когда ваш шаблон обрабатывается, шаблонный мотор не сможет отличить синтаксис Vue, который приведет к проблеме.

Обычно это легко обойти, избегая синтаксиса Vue E.G. в лезвие вы можете поставить @ Перед вашими скобами и лезвием узнают, что они игнорируют их, например, @ {{forvue}} Отказ Но все же, это дополнительная вещь, чтобы раздражать тебя.

Серверный рендеринг

Вы совсем просто не можете использовать шаблон DOM, если вы хотите, чтобы Server-Side представляют свое VUE-приложение, так как документ HTML не является входом процесса SSR.

Избегая шаблонов DOM

Как вы можете архитектор приложение Vue.js без шаблона DOM или хотя бы маленького?

1. Абстрактная разметка к компонентам

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

Одно файловые компоненты являются превосходным выбором. Если вы не можете включить шаг сборки в вашем проекте и не любите писать шаблоны как строки JavaScript (кто делает), вы можете попробовать X-шаблоны Отказ

X-шаблоны

С X-шаблонами ваш шаблон по-прежнему определен на странице, но в теге скрипта и, следовательно, не будет, чтобы избежать обработки синчарной частотой. Тег скрипта помечен Текст/X-шаблон и указано ID в определении вашего компонента.

Vue.component('my-component', {
  template: '#my-component'
}

2. Установите на пустой узел с помощью функции рендеринга

Абстрационная разметка в компоненты попадает в стену, когда вы понимаете, что вам все еще нужно объявить свой компонент корневого уровня в шаблоне DOM.

Если вы хотите полностью устранить свой шаблон DOM, вы можете установить компонент (ы) корневого уровня с помощью функции Render.

Допустим, у вас есть один всеобъемлющий компонент, который объявляет другие компоненты, называемые Приложение Отказ Приложение можно объявить с оказывать Функция и установлена на пустой узел, поскольку функции рендеринга будут заменить их элемент горы.

new Vue({
  el: '#app',
  components: {
    App
  },
  render: function(createElement) {
    return createElement(App);
  }
})

И с этим ваше приложение свободно от одного шаблона DOM!

Если вы можете устранить все шаблоны String и DOM из вашего приложения, вы можете использовать более меньшую строку Vue, только для времени выполнения. Это идеальная архитектура проекта и то, что вы увидите, используемые в шаблонах Vue-Cli.

Резюме

  • Шаблоны DOM проблематичны, поскольку парсер DOM может связываться с вашей разметкой. Также есть вероятность столкновений с шаблонными двигателями и несовместимостью с рендерингом сервера.
  • Чтобы минимизировать свой шаблон DOM, абстрактный разметку на компоненты.
  • Чтобы полностью устранить шаблон DOM, вам нужно установить свой компонент корневого уровня с помощью функции рендера.

Стать старшим Vue Developer в 2020 году.

Учитесь и осваивайте, какие профессионалы знают о строительстве, тестировании и развертывании, полностью стековых Vue Apps в нашем последнем курсе.

Учить больше