Типы Blazor
Создание проекта
1dotnet new blazorserver -n MyApp2# Или3dotnet new blazorwasm -n MyApp
Компоненты
▸Counter.razor
1@page "/counter"23<h3>Counter</h3>4<p>Current count: @currentCount</p>5<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>67@code {8 private int currentCount = 0;910 private void IncrementCount()11 {12 currentCount++;13 }14}
▸Свойства и параметры
1<h3>@Title</h3>2<p>@Description</p>34@code {5 [Parameter]6 public string Title { get; set; } = string.Empty;78 [Parameter]9 public string? Description { get; set; }1011 [Parameter]12 public EventCallback<string> OnClick { get; set; }13}
Маршрутизация
▸Основы
1@page "/users"2@page "/users/{id:int}"34@inject NavigationManager Navigation56<h3>User @Id</h3>78<button @onclick="GoHome">Home</button>910@code {11 [Parameter]12 public int Id { get; set; }1314 private void GoHome()15 {16 Navigation.NavigateTo("/");17 }18}
▸Параметры запроса
1@page "/search"23<h3>Search: @Query</h3>45@code {6 [SupplyParameterFromQuery]7 public string? Query { get; set; }8}
Жизненный цикл компонента
1@implements IDisposable23<h3>@Message</h3>45@code {6 private string Message = "Loading...";78 protected override async Task OnInitializedAsync()9 {10 await LoadData();11 }1213 protected override async Task OnParametersSetAsync()14 {15 // Вызывается при изменении параметров16 }1718 private async Task LoadData()19 {20 Message = "Data loaded";21 StateHasChanged();22 }2324 public void Dispose()25 {26 // Очистка ресурсов27 }28}
JavaScript Interop
1@inject IJSRuntime JS23<button @onclick="Alert">Click me</button>45@code {6 private async Task Alert()7 {8 await JS.InvokeVoidAsync("alert", "Hello from Blazor!");9 }1011 private async Task<string> GetWindowTitle()12 {13 return await JS.InvokeAsync<string>("eval", "document.title");14 }15}
Состояние приложения
▸CascadingParameter
1<CascadingValue Value="this">2 <ChildComponent />3</CascadingValue>45@code {6 public string CurrentUser { get; set; } = "John";7}
▸StateService
1public class AppState2{3 public string CurrentUser { get; set; } = string.Empty;45 public event Action? OnChange;67 public void NotifyStateChanged() => OnChange?.Invoke();8}
Blazor .NET 8 (United)
1@* Server-side rendering *@2@page "/"34<h1>Welcome to Blazor United!</h1>56@* Interactive *@7<Counter @rendermode="InteractiveServer" />89@* WebAssembly *@10<Counter @rendermode="InteractiveWebAssembly" />
Заключение
Blazor позволяет создавать веб-интерфейсы на C# без JavaScript. Компонентная модель, маршрутизация и интеграция с .NET экосистемой делают его мощным инструментом для SPA-приложений. Blazor United в .NET 8 объединяет лучшее из серверного и клиентского рендеринга.