Добавление динамического контента о себе
Теперь, когда у вас есть многостраничный сайт с HTML-контентом, давайте добавим немного динамического HTML!
Приготовьтесь к...
- Определить заголовок вашей страницы в Frontmatter и использовать его в вашем HTML.
- Условно отобразить HTML-элементы.
- Добавить немного контента обо мне.
Любой HTML-файл допустим на языке Astro. Но вы можете делать больше, чем просто HTML с Astro!
Определите и использовать переменную
Откройте about.astro
, который должен выглядеть так:
---
---<html lang="ru"> <head> <meta charset ="utf-8" /> <meta name="viewport" content="width=device-width" /> <title>Astro</title> </head> <body> <a href="/">Главная</a> <a href="/about/">Обо мне</a> <a href="/blog/">Блог</a> <h1>Обо мне</h1> <h2>… и моём новом сайт на Astro!</h2>
<p>Я изучаю введение об Astro. Это вторая страница на моем сайте, и это первая, которую я построил самостоятельно!</p>
<p>Этот сайт будет обновляться по мере того, как я буду проходить больше уроков, поэтому продолжайте проверять его и следите за тем, как идет мой путь!</p> </body></html>
-
Добавьте следующую строку JavaScript в скрипт frontmatter, между разделителями кода (
---
):src/pages/about.astro ---const pageTitle = "Обо мне";--- -
Замените статический заголовок «Astro» и заголовок «Обо мне» на вашем HTML на динамическую переменную
{pageTitle}
.src/pages/about.astro <html lang="ru"><head><meta charset ="utf-8" /><meta name="viewport" content="width=device-width" /><title>Astro</title><title>{pageTitle}</title></head><body><a href="/">Главная</a><a href="/about/">Обо мне</a><a href="/blog/">Блог</a><h1>Обо мне</h1><h1>{pageTitle}</h1><h2>… и моём новом сайт на Astro!</h2><p>Я изучаю введение об Astro. Это вторая страница на моем сайте, и это первая, которую я построил самостоятельно!</p><p>Этот сайт будет обновляться по мере того, как я буду проходить больше уроков, поэтому продолжайте проверять его и следите за тем, как идет мой путь!</p></body></html> -
Обновите живой просмотр вашей страницы
/about
.Текст вашей страницы должен выглядеть так же, и заголовок вашей страницы, отображаемый во вкладке вашего браузера, теперь должен читаться «Обо мне», а не «Astro».
Вместо того, чтобы вводить текст непосредственно в теги HTML, вы только что определили, а затем использовали переменную в двух разделах вашего
.astro
-файла соответственно. -
Используйте тот же шаблон для создания значения pageTitle для использования в
index.astro
(«Главная страница») иblog.astro
(«Мой блог об изучении Astro»). Обновите HTML этих страниц в обоих местах, чтобы ваш заголовок страницы соответствовал заголовку, отображаемому на каждой странице.
- Определите переменные в своем скрипте Astro с помощью выражений JavaScript или TypeScript.
- Используйте эти переменные в вашем шаблоне Astro внутри фигурных скобок , чтобы сообщить Astro, что вы используете некоторый JavaScript.
Напишите выражения JavaScript в Astro
-
Добавьте следующий JavaScript в свой frontmatter, между разделителем кода:
(Вы можете настроить код под себя, но в этом руководстве будет использоваться следующий пример.)
src/pages/about.astro ---const pageTitle = "Обо мне";const identity = {firstName: "Николай",country: "Нидерланды",occupation: "Технический автор",hobbies: ["фотография", "дизайн", "тенис"],};const skills = ["HTML", "CSS", "JavaScript", "React", "Astro", "Оптимизация SEO"];--- -
Затем добавьте следующий код в ваш HTML-шаблон, ниже вашего существующего контента:
src/pages/about.astro <p>Вот несколько фактов обо мне:</p><ul><li>Меня зовут {identity.FirstName}.</li><li>Я живу в {identity.country} и работаю в качестве {identity.occupation}.</li>{identity.hobbies.length >= 2 &&<li>Два моих увлечения: {identity.hobbies[0]} и {identity.hobbies[1]}</li>}</ul><p>Мои навыки:</p><ul>{skills.map((skill) => <li>{skill}</li>)}</ul>
- Написание шаблона Astro напоминает написание HTML, но вы можете использовать в нем выражения JavaScript.
- Скрипт frontmatter Astro содержит только JavaScript.
- Вы можете использовать все современные логические операторы, выражения и функции JavaScript в любой секции вашего
.astro
-файла. Но фигурные скобки необходимы (только) в теле шаблона HTML.
Проверьте свои знания
-
Frontmatter файла
.astro
написан на: -
Кроме HTML, синтаксис Astro позволяет включать:
-
Когда вам нужно писать свои скрипты на JavaScript в фигурных скобках?
Условный рендер элементов
Вы также можете использовать свои скрипты для выбора того, нужно ли выводить отдельные элементы в <body>
вашего HTML-контента.
-
Добавьте следующие строки в свой скрипт Frontmatter, чтобы определить переменные:
src/pages/about.astro ---const pageTitle = "Обо мне";const identity = {firstName: "Николай",country: "Нидерланды",occupation: "Технический автор",hobbies: ["фотография", "дизайн", "тенис"],};const skills = ["HTML", "CSS", "JavaScript", "React", "Astro", "Оптимизация SEO"];const happy = true;const finished = false;const goal = 3;--- -
Добавьте следующие строки ниже ваших существующих абзацев
Тогда проверьте живой просмотр на вкладке вашего браузера, чтобы увидеть, что отображается на странице:
src/pages/about.astro {happy && <p>Я рад изучать Astro!</p>}{finished && <p>Я закончил этот урок!</p>}{goal === 3 ? <p>Моя цель — закончить за 3 дня.</p> : <p>Моя цель — не 3 дня.</p>} -
Фиксируйте изменения на GitHub, прежде чем перейти к следующему шагу. Делайте это в любое время, когда вы хотите сохранить свою работу и обновить ваш сайт.
Синтаксис шаблона Astro похож на синтаксис JSX. Если вы когда-нибудь задаетесь вопросом, как использовать свой скрипт в вашем HTML, то поиск способа сделать это в JSX, вероятно, хорошая отправная точка!
Анализ шаблона
Предположим, дан следующий скрипт .astro
:
---const operatingSystem = "Linux";const quantity = 3;const footwear = "кросовок";const student = false;---
Для каждого выражения шаблона Astro, ты можешь предсказать HTML (если он есть!), который будет отправлен в браузер? Щелкни, чтобы узнать, прав ли ты!
-
<p>{operatingSystem}</p>
-
{student && <p>Я до сих пор учусь в школе</p>}
-
<p>У меня есть {quantity + 8} пар {footwear}</p>
-
{operatingSystem === "MacOS" ? <p>Я использую Mac.</p> : <p>Я не использую Mac.</p>}