.NET 9.0 - Novos recursos do Blazor


 Hoje vou apresentar os novos recursos do Blazor previstos para o .NET 9.0.

O novo Blazor vem junto com o .NET 9.0 e como estamos na versão Release Candidate 2 creio que estes recursos já estão consolidados. Assim, vou apresentar os principais recursos de forma objetiva apontando os links para mais informações quando isso for necessário.

Templates .NET MAUI Blazor Hybrid App e Web App solution

Existe agora um novo template de solução para criar aplicativos nativos .NET MAUI e clientes web Blazor. Este novo modelo permite escolher um modo de renderização interativo Blazor, e usa uma biblioteca de classes Razor compartilhada para manter os componentes Razor da IU.

Mais informações :

- learn.microsoft.com > maui blazor web app tutorial

- reddit.com/r/Blazor/comments/1dabyzk/net_8_blazor_hybrid_maui_app_web_hosting/

Novo middleware MapStaticAssets

Este novo middleware otimiza a entrega de ativos estáticos em qualisquer aplicativos ASP.NET Core e Blazor. Basicamente, ele compacta ativos via Gzip,  aplicando segurança para todos os ativos no momento da construção com um Base64 e remove caches quando o Visual Studio Hot Reload (ambiente de desenvolvimento) está em ação.

Mais informações :

- learn.microsoft.com > optimizing static web assets

- learn.microsoft.com > fundamentals of static files

Simplificação do processo de consulta dos estados de componente

- Encontra o local de execução atual do componente: Isso pode ser especialmente útil para otimização e depuração do desempenho do componente.

- Verifica se o componente está operando em um ambiente dinâmico verificando: Isso pode ser útil para partes cujas ações variam de acordo com a forma como seus arredores interagem.

- Obter o modo de renderização alocado ao componente: Compreender o modo de renderização pode ajudar a aprimorar o procedimento de renderização e aumentar a eficiência geral do componente.

 

Mais informações :

- learn.microsoft.com > detect rendering location interactivity & render mode runtime

Detectar a localização do componente, suporte de interatividade e modo de renderização

O ComponentBase.RendererInfo e o ComponentBase.AssignedRenderMode agora permitem detectar as seguintes ações:

- RendererInfo.Name retorna o local onde o componente está sendo executado
- RendererInfo.IsInteractive indica se o componente suporta interatividade no momento da renderização.
- ComponentBase.AssignedRenderMode expõe o modo de renderização atribuído do componente

Melhoria na reconecção server-side

Quando o aplicativo anterior é desconectado e o usuário navega para este aplicativo, ou o navegador coloca este aplicativo em modo de espera, o Blazor executa o mecanismo de reconexão.

Quando a reconexão não é bem-sucedida porque seu servidor encerrou a conexão, ele faz automaticamente uma atualização completa da página.

Com a nova configuração abaixo, você pode ajustar seu tempo de nova tentativa de reconexão:

Blazor.start({
  circuit: {
    reconnectionOptions: {
      retryIntervalMilliseconds: (previousAttempts, maxRetries) => 
        previousAttempts >= maxRetries ? null : previousAttempts * 1000
    },
  },
});
 

Serialização simples para autenticação

As novas APIs na ASP.NET facilitam a adição de autenticação aos projetos Blazor Web Apps existentes. Essas APIs, agora partem do modelo de projeto do Blazor Web App, permitem que o estado de autenticação seja serializado no servidor e desserializado no navegador, simplificando o processo de integração da autenticação.

Isso elimina a necessidade de os desenvolvedores implementarem ou copiarem manualmente códigos complexos, especialmente ao usar interatividade baseada em WebAssembly.

Mais informação :

- learn.microsoft.com > blazor Identity UI individual accounts

-learn.microsoft.com > manage authentication state

Adicionar páginas de renderização estáticas do lado do servidora

Com o .NET 9, adicionar páginas de renderização estática do lado do servidor (SSR) a Blazor Web Apps interativos globalmente ficou mais simples.

O novo atributo [ExcludeFromInteractiveRouting] permite que os desenvolvedores marquem páginas específicas do componente Razor que exigem SSR estático, como aquelas que dependem de cookies HTTP e do ciclo de solicitação/resposta.

As páginas anotadas com esse atributo saem do roteamento interativo e acionam uma recarga de página inteira, enquanto as páginas não anotadas assumem como padrão os modos de renderização interativa, como InteractiveServer.

Essa abordagem permite flexibilidade entre renderização estática e interativa, dependendo dos requisitos da página.

Mais informação:

- learn.microsoft.com > render-modes

Injeção de construtor em componentes Razor

Os componentes Razor suportam injeção de construtor, permitindo que serviços como o NavigationManager sejam injetados diretamente no construtor de um componente. Isso pode ser usado para gerenciar ações de navegação, como redirecionar o usuário em um evento como um clique de botão.

Mais informação :

- learn.microsoft.com> dependency-injection

Configurando a compactação do WebSocket e o CSP do Frame-Ancestors nos componentes do Interactive Server

Por padrão, os componentes do Interactive Server habilitam a compactação do WebSocket e definem uma Política de Segurança de Conteúdo (CSP) do frame-ancestors como self, restringindo a incorporação do aplicativo em <iframe>.

Além disso, a compactação pode ser desabilitada para melhorar a segurança definindo ConfigureWebSocketOptions como null, embora isso possa reduzir o desempenho.

Para evitar a incorporação do aplicativo em qualquer iframe enquanto mantém a compactação do WebSocket, defina ContentSecurityFrameAncestorsPolicy como 'none'.

Mais informação:

- learn.microsoft.com > websocket compression

- learn.microsoft.com > interactive server-side rendering when compression enabled

Rastreando o estado da composição com:  KeyboardEventArgs.IsComposing

A nova propriedade KeyboardEventArgs.IsComposing indica se um evento de teclado faz parte de uma sessão de composição, o que é essencial para lidar adequadamente com métodos de entrada de caracteres internacionais.

Configurando Row Overscan no QuickGrid com o novo parâmetro OverscanCount

O componente QuickGrid agora inclui uma propriedade OverscanCount, que controla quantas linhas extras são renderizadas antes e depois da área visível quando a virtualização está habilitada. Por padrão, OverscanCount é definido como 3, mas pode ser ajustado como abaixo para 5.


<QuickGrid ItemsProvider="itemsProvider" Virtualize="true" OverscanCount="5">...</QuickGrid>
 

Suporte de entrada de intervalo no componente InputNumber<TValue>

O componente InputNumber<TValue> agora suporta o atributo type="range", permitindo entradas de intervalo como sliders ou dials. Esse recurso suporta vinculação de modelo e validação de formulário, oferecendo uma maneira mais interativa de inserir dados numéricos em comparação à caixa de texto tradicional.

<EditForm>
     <InputNumber @bind-Value="Model.ProductCount" max="999" min="1" step="1" type="range" />
</EditForm>

@code {
    public class MyModel
    {
        [Required, Range(minimum: 1, maximum: 999)]
        public int ProductCount { get; set; }
    }
} 

Essas atualizações aprimoram a experiência de desenvolvimento do Blazor, proporcionando mais flexibilidade, melhor desempenho e integração simplificada de novos recursos em aplicativos da web e híbridos.

Bem-Vindo  .NET 9.0 !!!

E estamos conversados...

Disse Jesus : "Eu sou o bom Pastor; o bom Pastor dá a sua vida pelas ovelhas."
João 10:11

Referências:


José Carlos Macoratti