ឯកសារ Astro មួយ​អាច​ត្រូវ​យក​ទៅ​ប្រើប្រាស់​នៅ​ក្នុង​ឯកសារ Astro ដទៃ​ទៀត​បាន​។ ក្នុងករណី​នេះ ឯកសារ Astro ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ដែលត្រូវ​យក​ទៅ​ប្រើ​នៅ​ក្នុង​ឯកសារ​ផ្សេង​ទៀត ត្រូវ​ហៅ​ថា សមាសភាគ (component) ។ ការយក​សមាសភាគ​ណា​មួយ​ទៅ​ប្រើ ត្រូវ​ធ្វើ​ឡើង​តាម​រយៈ​ការនាំចូល​នៅ​ក្នុង frontmatter និងប្រើ​​សមាសភាគ​នេះ​នៅ​ក្នុង​ផ្នែក​នៃ​ភាសា Astro ។ មួយវិញ​ទៀត សមាសភាគ​ត្រូវ​ស្ថិត​នៅ​ក្រៅ​ថត src/pages មានដូច​ជា​ថត src/components ជាដើម​ ដើម្បីជៀសវាង​ការបង្កើត​ផ្លូវ​ទៅ​កាន់​សមាសភាគ​នោះ​។

 

​<!--src/components/Base.astro-->
<html lang="en">
	<head>
		<meta charset="utf-8" />
		<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
		<meta name="viewport" content="width=device-width" />
		<meta name="generator" content={Astro.generator} />
		<title>Astro</title>
	</head>
	<body>
		<p>ស្វាគមន៍​ពី​សមាសភាគ Base.astro</p>
	</body>
</html>

 

<!--src/pages/index.astro-->
---
import Base from "../components/Base.astro"
---

<Base />

 

យើង​អាច​ផ្តល់​ទិន្នន័យ​ផ្សេង​ៗ​អោយ​ទៅ​សមាសភាគ​ណា​មួយ​បាន ហើយ​ទិន្នន័យ​នោះ​នឹង​ក្លាយ​ទៅជា props សំរាប់​សមាសភាគ​នោះ​។ នៅ​ក្នុង​សមាសភាគ ការ​យក​ទិន្នន័យ​ទាំងនោះ​មក​ប្រើការ​ ត្រូវ​ធ្វើ​ឡើង​តាមរយៈអថេរ​សកល Astro.props នៅ​ក្នុង​ផ្នែក​ frontmatter ។

 

<!--src/components/Base.astro-->
---
const {pageTitle} = Astro.props
---

<html lang="en">
	<head>
		<meta charset="utf-8" />
		<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
		<meta name="viewport" content="width=device-width" />
		<meta name="generator" content={Astro.generator} />
		<title>{pageTitle}</title>
	</head>
	<body>
		<p>ស្វាគមន៍​ពី​សមាសភាគ Base.astro</p>
	</body>
</html>

 

<!--src/pages/index.astro-->
---
import Base from "../components/Base.astro"
---

<Base pageTitle="ទំព័រ​ដើម" />

 

នៅ​ក្នុង​សមាសភាគ ទិន្នន័យ​ props អាច​មាន​តំលៃ​មាន​ស្រាប់​ណា​មួយ ហើយ​ក្នុង​ករណី​ដែល​សមាសភាគ​មិន​បាន​ទទួល​នូវ​ទិន្នន័យ props ណា​មួយ​ទេ សមាសភាគ​នឹង​យក​ទិន្នន័យ​មាន​ស្រាប់​នោះ​មក​ប្រើ​។

 

<!--src/components/Base.astro-->
---
const {pageTitle="ទំព័រ​គ្រឺះ"} = Astro.props
---

<html lang="en">
	<head>
		<meta charset="utf-8" />
		<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
		<meta name="viewport" content="width=device-width" />
		<meta name="generator" content={Astro.generator} />
		<title>{pageTitle}</title>
	</head>
	<body>
		<p>ស្វាគមន៍​ពី​សមាសភាគ Base.astro</p>
	</body>
</html>

 

<!--src/pages/index.astro-->
---
import Base from "../components/Base.astro"
---

<Base />

 

​​​​​​នៅក្នុង​សមាសភាគ យើង​អាច​បង្កើត​ ប្រហោង​ (slot) ​​​​​​​​​ទុកសំរាប់​បញ្ចូល​បណ្តា​ធាតុ​នៃ​ភាសា Astro ទាំងឡាយ​ដែល​ត្រូវ​បាន​ផ្តល់​អោយ​ទៅ​សមាសភាគ​។

 

<!--src/components/Base.astro-->
---
const {pageTitle="ទំព័រ​គ្រឺះ"} = Astro.props
---

<html lang="en">
	<head>
		<meta charset="utf-8" />
		<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
		<meta name="viewport" content="width=device-width" />
		<meta name="generator" content={Astro.generator} />
		<title>{pageTitle}</title>
	</head>
	<body>
		<slot />
	</body>
</html>

 

<!--src/pages/index.astro-->
---
import Base from "../components/Base.astro"
---

<Base pageTitle="ទំព័រ​​ដើម">
	<p>ស្វាគមន៍​ពី​ទំព័រ index.astro</p>
</Base>

 

សមាសភាគ​មួយ​អាច​មាន​ប្រហោង​ជា​ច្រើន ហើយ​ប្រហោង​និមួយ​ៗ​អាច​មាន​ឈ្មោះ​ខុស​ៗ​គ្នា។ ឈ្មោះ​របស់​ប្រហោង​និមួយ​ៗ​ត្រូវ​កំណត់​ដោយ​លក្ខណៈ name ។ ជា​លទ្ធផល យើង​អាច​ផ្តល់​ធាតុនៃ​ភាសា Astro  ទៅ​ប្រហោង​ណា​មួយ​ក៏​បាន ដោយ​កំណត់​ឈ្មោះ​របស់​ប្រហោង​នោះ​នៅ​ក្នុង​ធាតុនៃ​ភាសា Astro ដែល​ត្រូវ​ផ្តល់អោយ​ទៅ​សមាសភាគ​។

 

<!--src/components/Base.astro-->
---
const {pageTitle="ទំព័រ​គ្រឺះ"} = Astro.props
---

<html lang="en">
	<head>
		<meta charset="utf-8" />
		<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
		<meta name="viewport" content="width=device-width" />
		<meta name="generator" content={Astro.generator} />
		<title>{pageTitle}</title>
	</head>
	<body>
		<slot name="top-slot" />
		<slot name="bottom-slot" />
	</body>
</html>

 

<!--src/pages/index.astro-->
---
import Base from "../components/Base.astro"
---

<Base pageTitle="ទំព័រ​​ដើម">
	<p slot="bottom-slot">សំរាប់​ប្រហោង​ក្រោម</p>
	<p slot="top-slot">សំរាប់​ប្រហោង​លើ</p>
</Base>

 

សមាសភាគ​អាច​មាន​ធាតុនៃ​ភាសា Astro មាន​ស្រាប់សំរាប់​ប្រហោងទាំងឡាយ ហើយ​ក្នុង​ករណី​ដែល​ប្រហោង​មិនបាន​​ទទួល​ធាតុនៃ​ភាសា Astro ទេ ធាតុ​មាន​ស្រាប់​នោះ​នឹង​ត្រូវ​យកមក​បំពេញ​ប្រហោង​នោះ​។

 

<!--src/components/Base.astro-->
---
const {pageTitle="ទំព័រ​គ្រឺះ"} = Astro.props
---

<html lang="en">
	<head>
		<meta charset="utf-8" />
		<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
		<meta name="viewport" content="width=device-width" />
		<meta name="generator" content={Astro.generator} />
		<title>{pageTitle}</title>
	</head>
	<body>
		<slot name="top-slot">
			<p>ធាតុ HTML មាន​ស្រាប់</p>
		</slot>
		<slot name="bottom-slot" />
	</body>
</html>

 

<!--src/pages/index.astro-->
---
import Base from "../components/Base.astro"
---

<Base pageTitle="ទំព័រ​​ដើម">
	<p slot="bottom-slot">សំរាប់​ប្រហោង​ក្រោម</p>
</Base>

 

សមាសភាគ​អាច​បង្កើត​ប្រហោង​មួយ​សំរាប់​បញ្ជូន​ធាតុនៃ​ភាសា Astro ទៅ​កាន់​ប្រហោង​នៅ​ក្នុង​សមាសភាគ​ផ្សេង​ទៀត ដោយ​ដាក់​ឈ្មោះ​ប្រហោង​ដែល​ត្រូវ​បញ្ជូន​ទៅ​នៅ​ក្នុង​ប្រហោង​របស់​វា​។

 

<!--src/components/Base.astro-->
---
const {pageTitle="ទំព័រ​គ្រឺះ"} = Astro.props
---

<html lang="en">
    <head>
	    <meta charset="utf-8" />
	    <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
	    <meta name="viewport" content="width=device-width" />
	    <meta name="generator" content={Astro.generator} />
	    <title>{pageTitle}</title>
    </head>
    <body>
	    <slot name="top-slot">
		    <p>ធាតុ HTML មាន​ស្រាប់</p>
	    </slot>
	    <slot name="bottom-slot" />
    </body>
</html>

 

<!--src/components/Home.astro-->
---
import Base from "./Base.astro"
const {title} = Astro.props
---

<Base pagTitle={title}>
    <slot name="home" slot="bottom-slot" />
</Base>

 

<!--src/pages/index.astro-->
---
import Home from "../components/Home.astro"
---

<Home title="ទំព័រ​​ដើម">
    <p slot="home">សំរាប់​ប្រហោង​ Home</p>
</Home>