บทเรียน Blazor
คอมโพเนนต์ไลบรารีคลาส Razor พร้อมพารามิเตอร์ ChildContent
render fragment, attribute splatting และการทดสอบ bUnit หนึ่งชุดต่อคอมโพเนนต์
สิ่งที่คุณจะสร้าง
ฟอร์มติดต่อขนาดเล็ก — ช่องกรอกที่มีป้ายกำกับ, ปุ่มส่ง,
@bind-Value การผูกข้อมูล, พฤติกรรมของแป้นพิมพ์และโปรแกรมอ่านหน้าจอจริง — เริ่มจากแบบไม่ตกแต่งก่อน แล้วค่อยใส่สไตล์ ภายในประมาณ 10 นาที
ก่อนเริ่ม
คุณต้องมี git และ .NET SDK 8 ขึ้นไป โปรเจกต์ Blazor ใดก็ได้ — Blazor Web App, Server หรือ WebAssembly
ขั้นที่ 1 — รับโค้ด
git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-blazor-headless
dotnet build
dotnet test # bUnit — 1,400+ cases across the catalog
คอมโพเนนต์อยู่ใน src/LilyBlazorHeadless/Components/ —
Button.razor, TextInput.razor — ไฟล์ Razor หนึ่งไฟล์ต่อหนึ่งตัว อ้างอิงโปรเจกต์นั้น (หรือคัดลอกไฟล์) จากแอป Blazor ของคุณ แล้วเพิ่ม @using LilyBlazorHeadless.Components ลงใน
_Imports.razor.
ขั้นที่ 2 — คอมโพเนนต์แรกของคุณ
<Button OnClick="Save">Save</Button>
แสดงผล <button class="button">ข้อตกลงของพารามิเตอร์ที่ใช้ร่วมกัน: Label ( aria-label ใช้แทนที่),
CssClass (ต่อท้าย hook พื้นฐาน),
ChildContentและ
[Parameter(CaptureUnmatchedValues = true)] attribute splatting เพื่อให้แอตทริบิวต์ HTML เพิ่มเติมใด ๆ ส่งผ่านไปได้
ขั้นที่ 3 — ประกอบฟอร์มเล็ก ๆ
<Form OnSubmit="HandleSubmit">
<Field Label="Full name" Required="true">
<TextInput Id="name" Label="Full name" @bind-Value="name" Required="true" />
</Field>
<Button Type="submit">Save</Button>
</Form>
@code {
private string name = "";
}
Field รับ Label ที่มองเห็นเป็นพารามิเตอร์ของตัวเอง แทนที่จะเป็นคอมโพเนนต์ป้ายกำกับที่ซ้อนอยู่ข้างใน — ส่งเพียงครั้งเดียวที่
Fieldและ TextInputที่ตรงกัน
Label ให้ชื่อที่เข้าถึงได้
ตรวจสอบเมื่อ 2026-08-29: ร่างก่อนหน้านี้ซ้อนคอมโพเนนต์ Label แยกต่างหากไว้ใน Fieldซึ่งแสดงผล ป้ายกำกับ สองอัน (อันหนึ่งว่างเปล่า) เพราะ Field
แสดงป้ายกำกับของตัวเองอยู่แล้วจาก Label พารามิเตอร์ — พบจากการตรวจดูซอร์สของคอมโพเนนต์ Form เองไม่มี Label พารามิเตอร์ ดังนั้นการใช้
<Form> ในร่างก่อนหน้านี้จึงถูกแก้ให้ละไว้ แทนที่จะสร้างแอตทริบิวต์ที่ไม่มีอยู่จริง
เส้นทางฟอร์มติดต่อแบบประกอบ
เป็นรูปแบบเดียวกัน และผ่านการทดสอบ e2e และ axe จริง
ตรวจสอบงานของคุณ: รันแอปแล้วฟอร์มจะดูธรรมดา — ตามที่ตั้งใจ สไตล์ยังรออยู่ข้างหน้า กด Tabโฟกัสจะเลื่อนผ่านทุกตัวควบคุม ป้ายกำกับถูกอ่านออกเสียง และการส่งทำงานได้ พฤติกรรมเสร็จแล้ว ส่วนรูปลักษณ์เป็นของคุณ และเป็นขั้นต่อไป
ขั้นที่ 4 — ใส่สไตล์
ใส่สไตล์ให้ class hook — .button, .text-input,
.label, .field — ใน app.cssหรือลิงก์ธีมสำเร็จรูปใน App.razor /
index.html:
<link rel="stylesheet" href="themes/wireframe.css" />
ขั้นที่ 5 — ดูทุกอย่างทำงาน
แอปตัวอย่าง Blazor Web แสดงแคตตาล็อกทั้งหมดพร้อมสไตล์และเดโม รวมถึงการทดสอบ Playwright e2e:
git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-blazor-web-examples
dotnet run --project src/LilyBlazorWebExamples
ขั้นต่อไป
- การกำหนดธีม — การสลับขณะรันไทม์ด้วยตัวช่วย theme-picker ของ Blazor (ไลบรารีคลาส Razor บน NuGet)
- ตัวช่วยการตั้งค่า — ภาษาและขนาดตัวอักษร
- แคตตาล็อกคอมโพเนนต์ — props, ARIA และแป้นพิมพ์ของแต่ละคอมโพเนนต์
มีคำถามระหว่างทางไหม? หน้าช่วยเหลือ เต็มไปด้วยคำตอบ — และถ้าขั้นตอนไหนทำให้ชัดเจนกว่านี้ได้ บอกเรา แล้วเรายินดีปรับปรุงบทเรียน