Sanket Meghani
Вы уже можете быть знакомы с шаблонами ES6 Template, которые позволяют строку интерполяции, как это:
const name = 'Steve';const message = `Hello ${name}!`;console.log(message); // Output -> Hello Steve!
ES6 также представила более продвинутую и мощную концепцию меченых шаблонных литералов. Тег – это функция, которая имеет возможность интерпретировать и обрабатывать шаблон. Это означает, что мы можем запустить строку шаблона через функцию и иметь больше контроля над тем, как шаблон преобразуется в строковое представление.
Метки – это просто нормальные функции, но полезны, они должны быть вызваны по-разному. В следующем примере показано, как тег определен и вызывается:
Тег должен быть вызван путем передачи шаблона литерала без использования кронштейнов, как показано в строке 9 выше.
Шаблон литерала передается на функцию тега как несколько параметров. Первый аргумент представляет собой строковый массив, содержащий строковые литералы из шаблона: первый элемент в массиве – строка, начиная с индекса 0 до первого интерполированного значения, второй элемент в массиве является строкой после первого интерполированного значения вверх-к следующей интерполяции и так далее до конца шаблона не достигнут.
Все интерполированные Выражения оцениваются и передаются в тег в качестве второго аргумента по подопечкам в порядке их возникновения. Тег может обрабатывать литералы и оценивали выражения для формирования возвращаемого значения.
Что делает его мощным?
Очевидный вопрос: как это более мощно, чем обычные шаблонные литералы?
Все интерполированные Выражения оцениваются и передаются в тег в качестве второго аргумента по подопечкам …
Это позволяет нам использовать выражения функций в виде интерполированных значений, которые можно назвать обратно. Давайте возьмем пример, чтобы сделать его более четким.
Когда интерполяция содержит экспрессию функции, она оценивается как нормальная строка в случае нормальных шаблонных литералов.
Например $ {(() => myфункция ()} оценивается как стри ng () => myfunc Тион ().
Хотя то же самое выражение оценивается как функция в случае помеченных графических литералов и тег может вызывать эту функцию. Как показано в примере, при вызове MyTag выражение {() => Myфункция ()} оценивается и передается как функция в f Parameter unc, который наш тег вызывал USI Ng Fun. C () на линии 9.
Заключение
Возможность тега использовать функциональные выражения как интерполяцию – вместе с его способностью интерпретировать шаблон, используя любую логику, которую он желает – делает его очень мощным. Его можно использовать для создания конкретного языка домена и открывает много возможностей для использования (или злоупотребления) меченых шаблонных литералов.
Тежные шаблонные литералы позволяют развивать библиотеки, такие как Стильные компоненты Отказ Пожалуйста, прокомментируйте ниже, если вы можете подумать о том, что все другие случаи использования могут быть включены путем помеченных шаблон литералов.
Оригинал: “https://www.freecodecamp.org/news/es6-tagged-template-literals-48a70ef3ed4d/”