Добавьте динамический контент о себе
Теперь, когда у вас есть многостраничный сайт с HTML-контентом, пришло время добавить немного динамического HTML!
Приготовьтесь…
- Определить заголовок вашей страницы в frontmatter и использовать его в вашем HTML
- Условно отобразить HTML-элементы
- Добавить немного контента о себе
Любой HTML-файл является допустимым языком Astro. Но с помощью Astro вы можете сделать больше, чем просто обычный HTML!
Определите и используйте переменную
Заголовок раздела Определите и используйте переменнуюОткройте файл about.astro
, который должен выглядеть следующим образом:
------<html lang="en"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> <title>Astro</title> </head> <body> <a href="/">Home</a> <a href="/about/">About</a> <a href="/blog/">Blog</a> <h1>About Me</h1> <h2>... and my new Astro site!</h2>
<p>I am working through Astro's introductory tutorial. This is the second page on my website, and it's the first one I built myself!</p>
<p>This site will update as I complete more of the tutorial, so keep checking back and see how my journey is going!</p> </body></html>
-
Добавьте следующую строку JavaScript в скрипт frontmatter, между кодовым забором:
src/pages/about.astro ---const pageTitle = "About Me";--- -
Замените статический заголовок “Astro” и заголовок “About Me” в вашем HTML динамической переменной
{pageTitle}
.src/pages/about.astro <html lang="en"><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width" /><title>Astro</title><title>{pageTitle}</title></head><body><a href="/">Home</a><a href="/about/">About</a><a href="/blog/">Blog</a><h1>About Me</h1><h1>{pageTitle}</h1><h2>... and my new Astro site!</h2><p>I am working through Astro's introductory tutorial. This is the second page on my website, and it's the first one I built myself!</p><p>This site will update as I complete more of the tutorial, so keep checking back and see how my journey is going!</p></body></html> -
Обновите предварительный просмотр страницы
/about
.Текст страницы должен выглядеть так же, а заголовок страницы, отображаемый на вкладке браузера, теперь должен гласить “About Me” вместо “Astro”.
Вместо того чтобы вводить текст непосредственно в HTML-теги, вы просто определили и затем использовали переменную в двух разделах вашего файла
.astro
соответственно. -
Используйте тот же шаблон для создания значения
pageTitle
, которое будет использоваться вindex.astro
(“Home Page”) иblog.astro
(“My Astro Learning Blog”). Обновите HTML этих страниц в обоих местах, чтобы название страницы совпадало с заголовком, отображаемым на каждой странице.
- Определяйте переменные в своем скрипте Astro с помощью выражений JavaScript или TypeScript.
- Используйте эти переменные в вашем шаблоне Astro внутри фигурных скобок
{ }
, чтобы сообщить Astro, что вы используете JavaScript.
Запись выражений JavaScript в Astro
Заголовок раздела Запись выражений JavaScript в Astro-
Добавьте следующий JavaScript в frontmatter, между кодовым забором:
(Вы можете настроить код под себя, но в данном руководстве будет использован следующий пример).
src/pages/about.astro ---const pageTitle = "About Me";const identity = {firstName: "Sarah",country: "Canada",occupation: "Technical Writer",hobbies: ["photography", "birdwatching", "baseball"],};const skills = ["HTML", "CSS", "JavaScript", "React", "Astro", "Writing Docs"];--- -
Затем добавьте следующий код в ваш HTML-шаблон, под существующим контентом:
src/pages/about.astro <p>Here are a few facts about me:</p><ul><li>My name is {identity.firstName}.</li><li>I live in {identity.country} and I work as a {identity.occupation}.</li>{identity.hobbies.length >= 2 &&<li>Two of my hobbies are: {identity.hobbies[0]} and {identity.hobbies[1]}</li>}</ul><p>My skills are:</p><ul>{skills.map((skill) => <li>{skill}</li>)}</ul>
- Написание шаблона Astro очень похоже на написание HTML, но вы можете включать в него выражения JavaScript.
- Скрипт frontmatter Astro содержит только JavaScript.
- Вы можете использовать все современные логические операторы, выражения и функции JavaScript в любой секции вашего
.astro
-файла. Но фигурные скобки необходимы (только) в теле шаблона HTML.
Проверьте свои знания
Заголовок раздела Проверьте свои знания-
Frontmatter файла
.astro
написан на: -
В дополнение к HTML синтаксис Astro позволяет включать:
-
Когда нужно писать JavaScript в фигурных скобках?
Условный рендеринг элементов
Заголовок раздела Условный рендеринг элементовВы также можете использовать свои скрипты, чтобы выбирать нужно ли отрисовывать отдельные элементы содержимого HTML <body>
.
-
Добавьте следующие строки в ваш скрипт frontmatter, чтобы определить переменные:
src/pages/about.astro ---const pageTitle = "About Me";const identity = {firstName: "Sarah",country: "Canada",occupation: "Technical Writer",hobbies: ["photography", "birdwatching", "baseball"],};const skills = ["HTML", "CSS", "JavaScript", "React", "Astro", "Writing Docs"];const happy = true;const finished = false;const goal = 3;--- -
Добавьте следующие строки под существующими параграфами.
Затем проверьте предварительный просмотр во вкладке браузера, чтобы увидеть, что отображается на странице:
src/pages/about.astro {happy && <p>I am happy to be learning Astro!</p>}{finished && <p>I finished this tutorial!</p>}{goal === 3 ? <p>My goal is to finish in 3 days.</p> : <p>My goal is not 3 days.</p>} -
Фиксируйте изменения на GitHub, прежде чем двигаться дальше. Делайте это всякий раз, когда хотите сохранить свою работу и обновить сайт.
Синтаксис шаблонов Astro похож на синтаксис JSX. Если вам когда-либо потребуется узнать, как использовать свой скрипт в HTML, поиск информации о том, как это делается в JSX, вероятно, будет хорошей отправной точкой!
Анализ шаблона
Заголовок раздела Анализ шаблонаПредположим, дан следующий скрипт .astro
:
---const operatingSystem = "Linux";const quantity = 3;const footwear = "boots";const student = false;---
Для каждого выражения шаблона Astro, вы можете предсказать HTML (если таковой имеется!), который будет отправлен в браузер? Нажмите, чтобы узнать, правы ли вы!
-
<p>{operatingSystem}</p>
-
{student && <p>Я до сих пор учусь в школе</p>}
-
<p>У меня есть {quantity + 8} пар {footwear}</p>
-
{operatingSystem === "MacOS" ? <p>Я использую Mac.</p> : <p>Я не использую Mac.</p>}