Model Komponen Blazor
Buat komponen Razor, pahami siklus hidup komponen, dan gunakan parameter serta nilai berjenjang.
Model Komponen Blazor adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 4 pelajaran total.
Apa Itu Blazor?
Blazor memungkinkan Anda membangun UI web interaktif menggunakan C# alih-alih JavaScript. Komponen ditentukan dalam file .razor yang menggabungkan markah HTML dan logika C#. Blazor berjalan di server (Blazor Server) atau di peramban melalui WebAssembly (Blazor WASM).
Komponen Pertama Anda
Komponen Razor adalah file .razor dengan markah HTML dan blok @code untuk C#. Nama komponen menjadi nama tag HTML.
@* Greeting.razor *@
<h2>Hello, @Name!</h2>
<p>You have @Count messages.</p>
@code {
[Parameter] public string Name { get; set; } = "World";
private int Count = 5;
}Siklus Hidup Komponen
Komponen Blazor memiliki siklus hidup dengan pengait yang dapat Anda override. Pengait yang paling umum adalah OnInitializedAsync (pemuatan data) dan OnParametersSetAsync (merespons perubahan parameter).
@code {
private List<Product> Products = new();
protected override async Task OnInitializedAsync()
{
// Called once on first render
Products = await Http.GetFromJsonAsync<List<Product>>("/api/products")
?? new();
}
protected override async Task OnParametersSetAsync()
{
// Called whenever parameters change
await LoadDataAsync();
}
}Parameter: Meneruskan Data ke Komponen
Tambahkan atribut [Parameter] pada properti untuk menerima data dari komponen induk. Parameter ditetapkan sebelum perenderan dan dapat memicu perenderan ulang saat berubah.
@* ProductCard.razor *@
<div class="card">
<h4>@Product.Name</h4>
<p>Price: @Product.Price.ToString("C")</p>
<button @onclick="AddToCart">Add to Cart</button>
</div>
@code {
[Parameter, EditorRequired]
public Product Product { get; set; } = default!;
[Parameter]
public EventCallback<Product> OnAddToCart { get; set; }
private async Task AddToCart() =>
await OnAddToCart.InvokeAsync(Product);
}Parameter Berjenjang
Parameter berjenjang mengalir ke bawah pohon komponen tanpa perlu meneruskannya secara eksplisit melalui setiap tingkat perantara—ideal untuk tema, info pengguna, atau status bersama.
@* App.razor — wraps the whole app *@
<CascadingValue Value="CurrentUser">
<Router AppAssembly="@typeof(App).Assembly">
<Found Context="routeData">
<RouteView RouteData="routeData" DefaultLayout="@typeof(MainLayout)" />
</Found>
</Router>
</CascadingValue>
@* Anywhere in the tree: *@
@code {
[CascadingParameter]
public UserInfo CurrentUser { get; set; } = default!;
}Merender Daftar dan Kondisi
Gunakan direktif Razor @if, @foreach, dan @for untuk menampilkan konten dinamis. Selalu berikan @key pada item daftar agar perbandingan perubahan berlangsung efisien.
@if (Products.Count == 0)
{
<p>No products found.</p>
}
else
{
<ul>
@foreach (var product in Products)
{
<li @key="product.Id">
<ProductCard Product="product" OnAddToCart="HandleAdd" />
</li>
}
</ul>
}RenderFragment dan ChildContent
Gunakan RenderFragment untuk meneruskan markah sebagai parameter—seperti slot di Vue atau elemen anak di React. Nama parameter yang lazim adalah ChildContent.
@* Panel.razor *@
<div class="panel">
<div class="panel-header">@Title</div>
<div class="panel-body">@ChildContent</div>
</div>
@code {
[Parameter] public string Title { get; set; } = "";
[Parameter] public RenderFragment? ChildContent { get; set; }
}
@* Usage: *@
<Panel Title="Order Details">
<p>Order #42 — Shipped</p>
</Panel>Referensi Komponen dengan @ref
Tangkap referensi ke komponen anak dengan @ref untuk memanggil metode publiknya atau membaca propertinya dari komponen induk.
@* Parent.razor *@
<ConfirmDialog @ref="_dialog" OnConfirm="DeleteOrder" />
<button @onclick="() => _dialog!.Show()">Delete Order</button>
@code {
private ConfirmDialog? _dialog;
private async Task DeleteOrder()
{
await OrderService.DeleteAsync(CurrentOrderId);
// Refresh UI...
}
}StateHasChanged dan Perenderan Ulang Manual
Blazor secara otomatis merender ulang setelah penangan peristiwa. Untuk perubahan status async di luar penangan peristiwa (misalnya, dari pengatur waktu latar belakang), panggil StateHasChanged() secara manual.
@implements IDisposable
<p>Time: @CurrentTime</p>
@code {
private string CurrentTime = "";
private Timer? _timer;
protected override void OnInitialized()
{
_timer = new Timer(_ =>
{
CurrentTime = DateTime.Now.ToString("HH:mm:ss");
InvokeAsync(StateHasChanged); // thread-safe re-render
}, null, 0, 1000);
}
public void Dispose() => _timer?.Dispose();
}ShouldRender untuk Performa
Timpa ShouldRender() untuk melewati perenderan ulang yang tidak diperlukan. Kembalikan false saat keluaran komponen tidak akan berubah, sehingga mengurangi beban perbandingan.
@code {
private string _lastRenderedStatus = "";
[Parameter] public string Status { get; set; } = "";
protected override bool ShouldRender()
{
// Only re-render if Status actually changed
if (Status == _lastRenderedStatus) return false;
_lastRenderedStatus = Status;
return true;
}
}Komponen Daftar Produk di Dunia Nyata
Komponen daftar produk lengkap yang memuat data saat inisialisasi, menangani status pemuatan, dan meneruskan peristiwa ke komponen induk.
@inject HttpClient Http
@if (_loading)
{
<p>Loading products...</p>
}
else
{
@foreach (var p in _products)
{
<ProductCard Product="p" OnAddToCart="AddToCart" />
}
}
@code {
private List<Product> _products = new();
private bool _loading = true;
[Parameter] public EventCallback<Product> OnCartUpdated { get; set; }
protected override async Task OnInitializedAsync()
{
_products = await Http.GetFromJsonAsync<List<Product>>("/api/products")
?? new();
_loading = false;
}
private async Task AddToCart(Product p) => await OnCartUpdated.InvokeAsync(p);
}Pemeriksaan Singkat
Metode siklus hidup mana yang paling tepat untuk memuat data dari API saat komponen Blazor diinisialisasi?
Ringkasan: Model Komponen Blazor
Poin penting:
- File .razor mencampur markah HTML dengan C# dalam blok @code
- [Parameter] menerima data dari induk; EventCallback meneruskan peristiwa ke atas
- CascadingParameter mengalirkan data ke bawah tanpa meneruskan prop melalui banyak tingkat
- RenderFragment/ChildContent membuat komponen berbasis slot yang dapat disusun
- OnInitializedAsync untuk pemuatan data awal; StateHasChanged untuk perenderan ulang manual
- ShouldRender() melewati perbandingan yang tidak diperlukan demi performa
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Model Komponen Blazor” gratis?
Ya — teks lengkap “Model Komponen Blazor” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Model Komponen Blazor”?
Buat komponen Razor, pahami siklus hidup komponen, dan gunakan parameter serta nilai berjenjang. Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C# Academy?
Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Model Komponen Blazor” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?
Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Model Komponen Blazor
- Pengikatan Data & Penanganan Peristiwa
- Komunikasi Komponen & DI
- Pengelolaan Status di Blazor