.NET

.NET

ASP .NET Core – Iniciando com o Blazor

6 ago, 2018
Publicidade

Hoje vamos criar nossa primeira aplicação usando o Blazor.

A Microsoft anunciou recentemente o lançamento de um novo framework web – o Blazor, que eu apresentei no seguinte artigo:

Hoje vamos configurar o ambiente de desenvolvimento do Blazor em nossa máquina e executar nossa primeira aplicação ASP.NET Core usando o Blazor e o Visual Studio 2017.

O Blazor é um novo framework para criar aplicativos do lado do cliente usando C#, Razor e HTML que são executados no navegador com o WebAssembly.

Mas o que vem a ser esse WebAssembly?

O WebAssembly (ou apenas Wasm) é uma linguagem assembly de baixo nível com um formato binário compacto, que pode ser executado nos navegadores. Como é um código binário de baixo nível, ele não pode ser lido/escrito por humanos, mas podemos compilar o código de outras linguagens para o WebAssembly para facilitar sua execução no navegador.

Ele é um subconjunto da linguagem JavaScript sendo projetado para complementar e executar ao lado do JavaScript. Ele nos permite executar código escrito em vários idiomas na Web, com velocidade quase nativa. O WebAssembly foi desenvolvido como um padrão web e é suportado por todos os principais navegadores sem plugins.

Os pré-requisitos para poder criar aplicações usando o Blazor, são:

  • Instalar o .NET Core 2.1 SDK. Pegue aqui.
  • Instalar a última versão do Visual Studio 2017 (15.7). Pegue aqui

Nota: o Blazor não é suportado em versões do Visual Studio anteriores à versão v15.7 e precisa do .NET Core SDK 2.1

No Blazor, um componente é uma classe .NET, que você pode escrever diretamente (por exemplo, como uma classe C#) ou mais comumente na forma de uma página Razor (ou seja, um arquivo .cshtml).

Quando você cria um novo projeto, o Blazor oferece as principais funcionalidades que a maioria dos aplicativos precisa. Isso inclui:

  • Layouts
  • Roteamento
  • Injeção de dependência
  • Lazy loading ou carregamento lento (isto é, carregar partes do aplicativo sob demanda à medida que o usuário navega)
  • Testes unitários

Tudo isso é opcional; você usa se quiser.

Se você estiver no Linux ou no Mac, pode criar uma aplicação Blazor na linha de comando:

dotnet new blazor -o BlazorApp1
cd BlazorApp1
dotnet run

Nota: antes você tem que instalar os templates para o Blazor:

dotnet new --install "Microsoft.AspNetCore.Blazor.Templates"

Para ver a lista de templates disponíveis, acesse: https://dotnetnew.azurewebsites.net/.

Iniciando o desenvolvimento com Blazor

A primeira coisa a fazer para iniciar o desenvolvimento com Blazor, é instalar a “ASP.NET Core Blazor Language Services extension”, que você pode obter neste link aqui.

Depois de fazer o download e instalar o pacote, você verá a mensagem abaixo:

Após esse procedimento, abra o VS 2017 Community e selecione File -> New Project;

Selecione .NET Core e o template ASP .NET Core Web Application, informe o nome Blazor_Demo e clique em “OK“;

Na próxima janela selecione o template Blazor e clique em “OK“:

Na janela Solution Explorer podemos ver a estrutura do projeto criado conforme mostra a imagem a seguir:

Temos uma pasta Pages, onde incluiremos as views da nossa aplicação, que serão renderizadas no navegador.

Executando o projeto iremos obter no navegador o seguinte resultado:

Vemos na página inicial o menu lateral esquerdo com três opções: Home, Counter e Fetch Data (igual a template do Angular).

Cada uma dessas páginas é a implementação dos arquivos Razor contido na pasta Pages:

  • Index.cshtml
  • Counter.cshtml
  • FetchData.cshtml

E cada um desses arquivos implementa um componente Blazor que é compilado e executado no lado do cliente no navegador.

Na opção Counter, a página exibe um Button(Click me) que ao ser clicado, incrementa o contador:

Assim, cada vez que o botão for clicado, o contador é incrementado sem uma atualização de página. Normalmente, esse tipo de comportamento do lado do cliente é tratado via JavaScript; mas aqui, ele é implementado em C# e .NET pelo componente Counter.

Vamos dar uma olhada na implementação do componente Counter no arquivo Counter.cshtml:

A interface do usuário para o componente Counter é definida usando código HTML normal.

A lógica de renderização dinâmica (por exemplo, loops, condicionais, expressões) é adicionada usando uma sintaxe do C# incorporada, chamada Razor. A marcação HTML e a lógica de renderização C# são convertidas em uma classe de componente no momento da criação. O nome da classe .NET gerada corresponde ao nome do arquivo.

Os membros da classe do componente são definidos em um bloco @functions. No bloco @functions, o estado do componente (propriedades, campos) e os métodos podem ser especificados para tratamento de eventos ou para definir outra lógica de componentes. Esses membros podem ser usados como parte da lógica de renderização do componente e para manipular eventos.

Quando o botão da página for clicado, o manipulador onclick registrado do componente Counter é chamado (o método IncrementCount) e o componente Counter regenera sua árvore de renderização. O Blazor compara a nova árvore de renderização com a anterior e aplica quaisquer modificações no navegador Document Object Model (DOM). A contagem exibida é então atualizada.

Vamos alterar o código do arquivo Counter.cshtml conforme a figura abaixo:

Executando novamente agora iremos obter:

Usando componentes

Depois que um componente é definido, o componente pode ser usado para implementar outros componentes. A marcação para usar um componente se parece com uma tag HTML, em que o nome da tag é o tipo de componente.

Abra o arquivo Index.cshtml e inclua a tag para incluir o componente Counter nesta página:

Execute novamente a aplicação e agora observe a página para a opção Home:

Usando parâmetros de componentes

Os componentes também podem ter parâmetros, que são definidos usando propriedades privadas na classe de componentes decorada com o atributo [Parameter]. Use atributos para especificar argumentos para um componente na marcação.

Vamos agora atualizar o componente Counter para ter uma propriedade IncrementaQuantidade, cujo valor padrão seja igual a 1.

Abra o arquivo Counter.cshtml e altere o código conforme abaixo:

Após isso, abra o arquivo Index.cshtml e altere a quantidade de incremento do Counter para 10, definindo um atributo que corresponda ao nome da propriedade do componente para IncrementaQuantidade.

Executando novamente veremos o parâmetro em ação:

Roteamento para componentes

A diretiva @page na parte superior do arquivo Counter.cshtml especifica que esse componente é uma página para a qual as solicitações podem ser roteadas. Especificamente, o componente Counter manipula requisições enviadas para /counter.

Sem a diretiva @page, o componente não manipularia solicitações roteadas, mas o componente ainda poderia ser usado por outros componentes.

Injeção de dependência

Os serviços registrados com o provedor de serviços do aplicativo estão disponíveis para os componentes por meio de injeção de dependência (DI). Os serviços podem ser injetados em um componente usando a diretiva @inject.

Dê uma olhada na implementação do componente FetchData em FetchData.cshtml. A diretiva @inject é usada para injetar uma instância HttpClient no componente.

O componente FetchData usa o HttpClient injetado para recuperar dados JSON do servidor quando o componente é inicializado.

Nos bastidores, o HttpClient fornecido pelo runtime do Blazor é implementado usando interop JavaScript para chamar a API de busca do navegador subjacente para enviar a requisição (a partir de C#, é possível chamar qualquer biblioteca JavaScript ou API do navegador).

Os dados recuperados são desserializados na variável C# forecasts como uma matriz de objetos do WeatherForecast.

A seguir, um laço foreach é usado para renderizar cada instância de forecast como uma linha na tabela:

E é assim que funciona a nossa primeira aplicação Blazor.

Aguarde mais artigos sobre o Blazor em breve.