Blazor es un framework de Microsoft que permite construir aplicaciones web interactivas utilizando C# en lugar de JavaScript, aprovechando .NET y WebAssembly para aplicaciones modernas.
Tipos de Blazor
Blazor WebAssembly (WASM)
Ejecuta C# directamente en el navegador mediante WebAssembly.
Blazor Server
Ejecuta el código en el servidor y envía actualizaciones al navegador en tiempo real a través de SignalR.
Crear proyecto
Crear un proyecto Blazor WebAssembly
Para crear un proyecto básico de Blazor WebAssembly.
dotnet new blazorwasm -o MiProyectoBlazorCrear un proyecto Blazor Server
Para crear un proyecto Blazor Server.
dotnet new blazorserver -o MiProyectoBlazorServerComponentes en Blazor
Componentes en Blazor
Los componentes son la unidad fundamental de Blazor. Se escriben en archivos .razor y pueden incluir C#, HTML y Razor.
<h3>Hola, Blazor</h3>
@code {
string mensaje = "Bienvenido a Blazor";
}Comunicarse entre componentes
Propiedades y parámetros pueden ser utilizados para comunicar datos entre componentes.
<h3>@Titulo</h3>
@code {
[Parameter]
public string Titulo { get; set; }
}Para pasar parámetros a un componente:
<ComponentePersonalizado Titulo="Hola Blazor" />Ciclo de vida de los componentes
Métodos del ciclo de vida
Blazor proporciona varios métodos de ciclo de vida para controlar la lógica de los componentes:
OnInitialized() Se ejecuta una vez cuando el componente es inicializado.
OnParametersSet() Se ejecuta cada vez que se cambian los parámetros.
OnAfterRender() Se ejecuta después de que el componente ha sido renderizado.
@code {
protected override void OnInitialized() {
Console.WriteLine("Componente inicializado");
}
}Enlaces de datos (Data Binding)
One-way binding
El enlace de datos de una vía se utiliza para mostrar datos en la UI.
<p>@mensaje</p>
@code {
string mensaje = "Hola desde Blazor";
}Two-way binding
El enlace de datos bidireccional permite que los cambios en la UI se reflejen en el código y viceversa. Utiliza el atributo @bind.
<input @bind="mensaje" />
<p>@mensaje</p>
@code {
string mensaje = "Hola Blazor";
}Manejo de eventos
Eventos comunes
Blazor utiliza el prefijo @ para manejar eventos del navegador, como clics de botones y cambios de texto.
<button @onclick="HandleClick">Click me</button>
@code {
void HandleClick() {
Console.WriteLine("Button clicked!");
}
}EventCallback
Blazor permite la comunicación de eventos entre componentes padres e hijos con EventCallback.
Componente hijo:
<button @onclick="OnClick">Click me</button>
@code {
[Parameter]
public EventCallback OnClick { get; set; }
}Componente padre:
<ChildComponent OnClick="HandleChildClick" />
@code {
void HandleChildClick() {
Console.WriteLine("El botón del componente hijo fue clicado");
}
}Renderización condicional y bucles
Renderizado condicional
Blazor permite mostrar o esconder elementos basados en condiciones lógicas.
@if (mostrar) {
<p>Este es un párrafo condicional</p>
}Renderizado con bucles
Utiliza @foreach para iterar sobre colecciones y renderizar múltiples elementos.
@foreach (var item in lista) {
<p>@item</p>
}
@code {
List<string> lista = new List<string> { "Item 1", "Item 2", "Item 3" };
}Directivas comunes en Blazor
@page
Define una ruta en un componente Razor, convirtiéndolo en una página.
@page "/home"
<h3>Home Page</h3>@code
Permite escribir bloques de C# dentro de un componente .razor.
@code {
string mensaje = "Hola Blazor";
}@inject
Inyecta servicios dentro de los componentes para acceso a dependencias.
@inject ServicioDeTiempo Tiempo
<p>Tiempo actual: @Tiempo.GetHoraActual()</p>Routing en Blazor
Configuración de rutas
En un componente .razor, puedes definir rutas con @page.
@page "/about"
<h3>About Page</h3>Navegación programática
Puedes redirigir programáticamente utilizando NavigationManager.
@inject NavigationManager navManager
<button @onclick="NavigateToHome">Ir a Inicio</button>
@code {
void NavigateToHome() {
navManager.NavigateTo("/home");
}
}Inyección de dependencias
Configurar servicios
Blazor soporta inyección de dependencias a través del contenedor de servicios en Program.cs.
builder.Services.AddSingleton<ServicioDeTiempo>();Inyectar servicios en un componente
Para usar un servicio dentro de un componente, se utiliza @inject.
@inject ServicioDeTiempo Tiempo
<p>La hora es: @Tiempo.GetHoraActual()</p>
@code {
// lógica adicional
}Formularios y validación
Crear un formulario simple
Blazor facilita la creación de formularios con binding bidireccional y eventos de envío.
<EditForm Model="@usuario" OnValidSubmit="HandleSubmit">
<InputText id="nombre" @bind-Value="usuario.Nombre" />
<button type="submit">Enviar</button>
</EditForm>
@code {
Usuario usuario = new Usuario();
void HandleSubmit() {
Console.WriteLine("Formulario enviado");
}
}Validación de formularios
Blazor incluye soporte para validación utilizando atributos de anotación de datos (DataAnnotations).
public class Usuario {
[Required]
public string Nombre { get; set; }
}Componentes reutilizables
Componentes parametrizados
Puedes crear componentes reutilizables pasando parámetros.
<h3>@Titulo</h3>
@code {
[Parameter]
public string Titulo { get; set; }
}Componentes anidados
Puedes usar componentes dentro de otros componentes:
<ComponenteHijo Titulo="Mi Componente" />Blazor y JavaScript
Invocar JavaScript desde Blazor
Blazor permite la interoperabilidad con JavaScript mediante IJSRuntime.
@inject IJSRuntime js
<button @onclick="MostrarAlerta">Mostrar Alerta</button>
@code {
async Task MostrarAlerta() {
await js.InvokeVoidAsync("alert", "Hola desde Blazor!");
}
}Invocar Blazor desde JavaScript
Puedes llamar a métodos C# desde JavaScript utilizando DotNet.invokeMethodAsync.
DotNet.invokeMethodAsync('NombreAssembly', 'MetodoEnCSharp');Deploy de aplicaciones Blazor
Blazor WebAssembly
Para publicar una aplicación WebAssembly, usa el siguiente comando:
dotnet publish --configuration ReleaseBlazor Server
Para publicar una aplicación Blazor Server:
dotnet publish --configuration Release --output ./publicDebugging y optimización
Debug en Blazor WebAssembly
Puedes depurar aplicaciones Blazor WASM utilizando las herramientas de desarrollo del navegador y Visual Studio.
Optimización de carga
Utiliza la publicación en modo release para optimizar la carga de la aplicación.
dotnet publish -c Release