Blazor Bileşen Modeli
Razor bileşenleri oluşturun, bileşen yaşam döngüsünü anlayın, parametreleri ve kademeli değerleri kullanın.
Blazor Bileşen Modeli, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.
Blazor Nedir?
Blazor, JavaScript yerine C# kullanarak etkileşimli web kullanıcı arayüzleri oluşturmanızı sağlar. Bileşenler, HTML biçimlendirmesi ile C# mantığını birleştiren .razor dosyalarında tanımlanır. Blazor sunucuda (Blazor Server) veya WebAssembly aracılığıyla tarayıcıda (Blazor WASM) çalışır.
İlk Bileşeniniz
Razor bileşeni, HTML biçimlendirmesi ve C# için bir @code bloğu içeren bir .razor dosyasıdır. Bileşenin adı, HTML etiketinin adı olur.
@* Greeting.razor *@
<h2>Hello, @Name!</h2>
<p>You have @Count messages.</p>
@code {
[Parameter] public string Name { get; set; } = "World";
private int Count = 5;
}Bileşen Yaşam Döngüsü
Blazor bileşenlerinin, üzerine yazabileceğiniz kancalardan oluşan bir yaşam döngüsü vardır. En yaygın olanlar OnInitializedAsync (veri yükleme) ve OnParametersSetAsync (parametre değişikliklerine tepki verme) yöntemleridir.
@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();
}
}Parametreler: Bileşenlere Veri Aktarma
Üst bileşenlerden veri kabul etmek için özelliklere [Parameter] ek açıklamasını uygulayın. Parametreler oluşturma işleminden önce ayarlanır ve değiştirildiklerinde yeniden oluşturmayı tetikleyebilir.
@* 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);
}Basamaklı Parametreler
Basamaklı parametreler, her ara düzeyden açıkça aktarılmaları gerekmeden bileşen ağacında aşağı doğru ilerler — temalar, kullanıcı bilgileri veya paylaşılan durum için idealdir.
@* 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!;
}Listeleri ve Koşulları Oluşturma
Dinamik içerik oluşturmak için Razor yönergeleri olan @if, @foreach ve @for kullanın. Verimli fark hesaplama için liste öğelerinde her zaman @key sağlayın.
@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 ve ChildContent
Biçimlendirmeyi bir parametre olarak aktarmak için RenderFragment kullanın — bu, Vue'daki yuvalara veya React'teki alt öğelere benzer. Geleneksel parametre adı ChildContent'tir.
@* 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>@ref ile Bileşen Başvuruları
Üst bileşenden genel yöntemlerini çağırmak veya özelliklerini okumak için @ref ile bir alt bileşene başvuru yakalayın.
@* 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 ve Elle Yeniden Oluşturma
Blazor, olay işleyicilerinden sonra otomatik olarak yeniden oluşturma yapar. Olay işleyicilerinin dışındaki eşzamansız durum değişiklikleri için (örneğin, arka plandaki bir zamanlayıcıdan gelen değişikliklerde) StateHasChanged() yöntemini elle çağırın.
@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();
}Performans İçin ShouldRender
Gereksiz yeniden oluşturmaları atlamak için ShouldRender() yönteminin üzerine yazın. Bileşenin çıktısı değişmeyecekse false döndürerek fark hesaplaması yükünü azaltın.
@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;
}
}Gerçek Dünya: Ürün Listeleme Bileşeni
Başlatma sırasında verileri yükleyen, yükleme durumunu yöneten ve olayları üst bileşene aktaran eksiksiz bir ürün listeleme bileşeni.
@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);
}Hızlı Kontrol
Bir Blazor bileşeni başlatılırken bir API'den veri yüklemek için en uygun yaşam döngüsü yöntemi hangisidir?
Özet: Blazor Bileşen Modeli
Temel çıkarımlar:
- .razor dosyaları, bir @code bloğunda HTML biçimlendirmesi ile C# kodunu birleştirir
- [Parameter] üst bileşenden veri kabul eder; EventCallback olayları üst bileşene aktarır
- CascadingParameter, özellikleri her ara düzeyden geçirmeden verileri aşağıya aktarır
- RenderFragment/ChildContent, birleştirilebilir yuva tabanlı bileşenler oluşturur
- İlk veri yükleme için OnInitializedAsync; elle yeniden oluşturma için StateHasChanged kullanılır
- ShouldRender(), performans için gereksiz fark hesaplamalarını atlar
Sıkça Sorulan Sorular
“Blazor Bileşen Modeli” dersi ücretsiz mi?
Evet — “Blazor Bileşen Modeli” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.
“Blazor Bileşen Modeli” dersinde ne öğreneceğim?
Razor bileşenleri oluşturun, bileşen yaşam döngüsünü anlayın, parametreleri ve kademeli değerleri kullanın. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C# Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Blazor Bileşen Modeli” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Blazor Bileşen Modeli
- Veri Bağlama ve Olay İşleme
- Bileşenler Arası İletişim ve DI
- Blazor'da Durum Yönetimi