Modèle de composants Blazor
Créez des composants Razor, comprenez leur cycle de vie et utilisez les paramètres ainsi que les valeurs en cascade.
Modèle de composants Blazor est une leçon C# Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C# Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C# Academy comprend 4 leçons au total.
Qu’est-ce que Blazor ?
Blazor vous permet de créer des interfaces web interactives en utilisant C# plutôt que JavaScript. Les composants sont définis dans des fichiers .razor qui combinent du balisage HTML et de la logique C#. Blazor s’exécute sur le serveur (Blazor Server) ou dans le navigateur via WebAssembly (Blazor WASM).
Votre premier composant
Un composant Razor est un fichier .razor contenant du balisage HTML et un bloc @code pour le C#. Le nom du composant devient le nom de la balise 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;
}Cycle de vie des composants
Les composants Blazor possèdent un cycle de vie avec des points d’extension que vous pouvez redéfinir. Les plus courants sont OnInitializedAsync (chargement des données) et OnParametersSetAsync (réaction aux changements de paramètres).
@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();
}
}Paramètres : transmettre des données aux composants
Décorez les propriétés avec [Parameter] pour accepter des données provenant des composants parents. Les paramètres sont définis avant le rendu et peuvent déclencher un nouveau rendu lorsqu’ils changent.
@* 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);
}Paramètres en cascade
Les paramètres en cascade descendent dans l’arbre des composants sans devoir être transmis explicitement à chaque niveau intermédiaire, ce qui est idéal pour les thèmes, les informations utilisateur ou l’état partagé.
@* 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!;
}Rendu des listes et des conditions
Utilisez les directives Razor @if, @foreach et @for pour générer du contenu dynamique. Fournissez toujours @key sur les éléments de liste pour optimiser la comparaison différentielle.
@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 et ChildContent
Utilisez RenderFragment pour transmettre du balisage en tant que paramètre, comme les emplacements dans Vue ou les enfants dans React. Le nom de paramètre conventionnel est 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>Références de composants avec @ref
Capturez une référence vers un composant enfant avec @ref afin d’appeler ses méthodes publiques ou de lire ses propriétés depuis le parent.
@* 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 et nouveau rendu manuel
Blazor effectue automatiquement un nouveau rendu après les gestionnaires d’événements. Pour les changements d’état async en dehors des gestionnaires d’événements, par exemple depuis un Timer d’arrière-plan, appelez manuellement StateHasChanged().
@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 pour les performances
Redéfinissez ShouldRender() pour éviter les nouveaux rendus inutiles. Renvoyez false lorsque la sortie du composant ne changera pas, afin de réduire la surcharge liée à la comparaison différentielle.
@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;
}
}Cas concret : composant de liste de produits
Un composant complet de liste de produits qui charge les données lors de son initialisation, gère l’état de chargement et transmet les événements au parent.
@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);
}Vérification rapide
Quelle méthode du cycle de vie est la mieux adaptée pour charger les données depuis une API lors de l’initialisation d’un composant Blazor ?
Récapitulatif : modèle de composants Blazor
À retenir :
- Les fichiers .razor mélangent le balisage HTML et le C# dans un bloc @code
- [Parameter] accepte les données du parent ; EventCallback transmet les événements vers le parent
- CascadingParameter transmet les données vers les composants descendants sans propagation manuelle des propriétés
- RenderFragment/ChildContent permet de créer des composants composables fondés sur des emplacements
- OnInitializedAsync charge les données initiales ; StateHasChanged permet un nouveau rendu manuel
- ShouldRender() évite les comparaisons différentielles inutiles pour améliorer les performances
Questions Fréquemment Posées
La leçon « Modèle de composants Blazor » est-elle gratuite ?
Oui — le texte complet de « Modèle de composants Blazor » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C# Academy, passe à CoddyKit PRO. Le cours C# Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Modèle de composants Blazor » ?
Créez des composants Razor, comprenez leur cycle de vie et utilisez les paramètres ainsi que les valeurs en cascade. Tu pratiques C# Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C# Academy ?
Aucune expérience préalable n'est requise. C# Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Modèle de composants Blazor » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C# Academy ?
Oui. Chaque leçon C# Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Modèle de composants Blazor
- Liaison de données et gestion des événements
- Communication entre composants et DI
- Gestion de l’état dans Blazor