Astro Syntax
If you know HTML, you already know enough to write your first Astro component.
Astro component syntax is a superset of HTML. The syntax was designed to feel familiar to anyone with experience writing HTML or JSX, and adds support for including components and JavaScript expressions.
JSX-like Expressions
Section titled JSX-like ExpressionsYou can define local JavaScript variables inside of the frontmatter component script between the two code fences (---
) of an Astro component. You can then inject these variables into the component’s HTML template using JSX-like expressions!
Variables
Section titled VariablesLocal variables can be added into the HTML using the curly braces syntax:
Dynamic Attributes
Section titled Dynamic AttributesLocal variables can be used in curly braces to pass attribute values to both HTML elements and components:
Dynamic HTML
Section titled Dynamic HTMLLocal variables can be used in JSX-like functions to produce dynamically-generated HTML elements:
Astro can conditionally display HTML using JSX logical operators and ternary expressions.
Dynamic Tags
Section titled Dynamic TagsYou can also use dynamic tags by setting a variable to an HTML tag name or a component import:
When using dynamic tags:
-
Variable names must be capitalized. For example, use
Element
, notelement
. Otherwise, Astro will try to render your variable name as a literal HTML tag. -
Hydration directives are not supported. When using
client:*
hydration directives, Astro needs to know which components to bundle for production, and the dynamic tag pattern prevents this from working.
Fragments
Section titled FragmentsAstro supports using either <Fragment> </Fragment>
or the shorthand <> </>
.
Fragments can be useful to avoid wrapper elements when adding set:*
directives, as in the following example:
Differences between Astro and JSX
Section titled Differences between Astro and JSXAstro component syntax is a superset of HTML. It was designed to feel familiar to anyone with HTML or JSX experience, but there are a couple of key differences between .astro
files and JSX.
Attributes
Section titled AttributesIn Astro, you use the standard kebab-case
format for all HTML attributes instead of the camelCase
used in JSX. This even works for class
, which is not supported by React.
Multiple Elements
Section titled Multiple ElementsAn Astro component template can render multiple elements with no need to wrap everything in a single <div>
or <>
, unlike JavaScript or JSX.
Comments
Section titled CommentsIn Astro, you can use standard HTML comments or JavaScript-style comments.