.Net8 Blazor 尝鲜

news/发布时间2024/8/25 20:45:28

全栈 Web UI

随着 .NET 8 的发布,Blazor 已成为全堆栈 Web UI 框架,可用于开发在组件或页面级别呈现内容的应用,其中包含:

  • 用于生成静态 HTML 的静态服务器呈现。
  • 使用 Blazor Server 托管模型的交互式服务器呈现。
  • 使用 Blazor WebAssembly 托管模型的交互式客户端呈现。
  • 下载 Blazor 捆绑包并激活 .NET WebAssembly 运行时后,最初使用 Blazor Server,并在随后访问时使用 WebAssembly 自动进行交互式客户端呈现。 自动呈现通常会提供最快的应用启动体验。

默认情况下,交互式呈现模式还会预呈现内容。

Blazor 呈现模式

流式渲染

流式渲染是 .NET 8 Blazor 中另一个有前途的功能,在将静态服务器呈现与 Blazor 结合使用时,可以在响应流中流式传输内容更新。 流式呈现可以改善执行长期运行异步任务的页面的用户体验,以便在内容可用后立即通过呈现内容来完全呈现。流式渲染允许渲染静态 HTML 以及内容的占位符。一旦异步服务器端调用完成(意味着它可以传输数据),实际的 HTML 页面就会通过用实际数据填充占位符对象来更新。

/Pages/Weather.razor
@attribute [StreamRendering]

保留组件状态

可以使用现有 PersistentComponentState 服务在 Blazor Web 应用中保留和读取组件状态

Auto mode

自动模式是我个人最期待的一种模式,它代表了 Blazor 的“终极”场景,允许将服务器端和 WebAssembly 结合在一起。

此场景提供来自服务器的初始页面,这意味着它将快速加载。随后,必要的对象被下载到客户端,因此下次页面加载时,它会从 Wasm 提供。(该版本尚未出现在 .NET 8 预览版 7 中,因此在撰写本文时没有更多详细信息可分享。)如果您认为这与所描述的“四模型合一”方法非常相似之前,请知道自动模式针对的是浏览器应用程序,而不是完整的桌面或移动平台场景。

新建 Blazor Web App 工程

  1. 默认情况下,Blazor Web App 模板设置为SSR服务器端呈现Razor 组件
  2. 选择“Weather”菜单,页面将短暂显示“Loading...”,然后在表格中呈现天气数据。这是前面讨论的流渲染功能的示例

/Pages/Weather.razor

注意第2行:

@attribute [StreamRendering]

这允许新的 Blazor 流渲染功能发挥作用。

代码部分更新为:

@attribute [StreamRendering(false)]

然后单击“Weather”页面。请注意,这次没有显示“Loading...”消息,但页面需要几秒钟的时间才能呈现并显示实际的天气表。

交互式呈现模式

打开新工程的 Program.cs 文件, 会看到以下新的配置

builder.Services.AddRazorComponents().AddInteractiveServerComponents() //添加服务以支持呈现交互式服务器组件.AddInteractiveWebAssemblyComponents(); //添加服务以支持呈现交互式 WebAssembly 组件//终结点约定生成器扩展
app.MapRazorComponents<App>().AddInteractiveServerRenderMode() //配置应用程序的服务器渲染模式.AddInteractiveWebAssemblyRenderMode() //为应用配置 WebAssembly 呈现模式。.AddAdditionalAssemblies(typeof(Counter).Assembly);

将呈现模式应用于组件实例

  1. 将服务器呈现模式应用于 Dialog 组件实例:
<Dialog @rendermode="InteractiveServer" />
  1. 使用自定义配置直接引用实例化的静态呈现模式实例:
@rendermode renderMode@code {private static IComponentRenderMode renderMode = new InteractiveWebAssemblyRenderMode(prerender: false);
}
  1. 将呈现模式应用于组件定义
@page "..."
@rendermode RenderMode.InteractiveServer
  1. 呈现模式
呈现模式 指令 注意事项
交互式服务器 @attribute [RenderModeInteractiveServer] 放在SSR工程(BlazorApp1)
交互式 WebAssembly @attribute [RenderModeInteractiveWebAssembly] 放在Wasm工程(BlazorApp1.Client)
交互式自动 @attribute [RenderModeInteractiveAuto] 放在Wasm工程(BlazorApp1.Client)

测试页面

**RenderModeInteractiveServer.razor **

路径:SSR工程(BlazorApp1)/Components/Pages

@page "/render-mode-InteractiveServer"
@rendermode InteractiveServer<h2>InteractiveServer</h2><button @onclick="UpdateMessage">Click me</button> @message@code {private string message = "Not clicked yet.";private void UpdateMessage(){message = "Somebody clicked me!";}
}

RenderModeInteractiveWebAssembly.razor

路径:Wasm工程(BlazorApp1.Client)/Pages

@page "/render-mode-InteractiveWebAssembly"
@rendermode InteractiveWebAssembly<h2>InteractiveWebAssembly</h2><button @onclick="UpdateMessage">Click me</button> @message@code {private string message = "Not clicked yet.";private void UpdateMessage(){message = "Somebody clicked me!";}
}

RenderModeInteractiveAuto.razor

路径:Wasm工程(BlazorApp1.Client)/Pages

@page "/render-mode-InteractiveAuto"
@rendermode InteractiveAuto<h2>InteractiveAuto</h2><button @onclick="UpdateMessage">Click me</button> @message@code {private string message = "Not clicked yet.";private void UpdateMessage(){message = "Somebody clicked me!";}
}

测试项目链接

https://github.com/densen2014/net8test

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.liansuoyi.cn/news/25501452.html

如若内容造成侵权/违法违规/事实不符,请联系连锁易网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

前端学习-JavaScrip学习-js基础04

学习教程:黑马程序员视频链接 函数 练习-函数参数、返回值 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">…

RV32I 基本整数指令集分析

RV32I 基本整数指令集分析 RV32I 被设计成足以构建一个编译器目标机,并支持现代操作系统环境。 这个 ISA 也被设计成在最小实现时减少所需的硬件。RV32I 包括了 47 条单独的 指令,虽然某个简单的实现可以使用一条 SYSTEM 硬件指令将 8 条ECALL/EBREAK/CSRR*,指令全部用自陷实…

linux/ubuntu定时/达到为500GB【如果】清空日志脚本

需求1:定时清空uwsgi.log和app.log 结构demo方法 针对清空uwsgi.log和app.log日志文件的Shell脚本,并使用cron作业进行定时清理的例子。 首先,创建一个脚本文件,比如 clear_logs.sh: #!/bin/bash## 设置日志文件路径 uwsgi_log="/home/Fire9/code/weibo/uwsgi.log&qu…

Log4j入门使用(什么是日志? 为什么要使用Log4j)

什么是Log4j? Log4j是一个Java日志组件,通过日志记录器接口,为程序提供了灵活的配置选项,可以将不同级别的消息输出到不同的目的地,如控制台,文件,数据库等。Log4j可以帮助开发人员更好地调试应用程序,同时也方便了运维人员对应用程序进行监控和故障排查。 为什么要使用…

pikachu靶场搭建

皮卡丘下载链接 pikachu Pikachu是一个带有漏洞的Web应用系统,在这里包含了常见的web安全漏洞。 如果你是一个Web渗透测试学习人员且正发愁没有合适的靶场进行练习,那么Pikachu可能正合你意。 Pikachu上的漏洞类型列表如下: Burt Force(暴力破解漏洞) XSS(跨站脚本漏洞) CSR…

Python基础之map()函数

map()函数会根据提供的对指定的可迭代对象的每个元素进行运算,并将返回运算结果的迭代器。 先去将几个例子,这样比较通俗易懂。 eg 1:输入数据型 a=map(int,input().split()) 输入:12 13 结果为: 分析:map(int,input().split()) 将输入的值(input.split()的东西也叫做可…

数字马力面经和答案解析!社招岗

面试背景:社招、2 年开发工作经验。面试时间是今年 7.3 号,工作地点是长沙,面试总时长 50 分钟。 面试题目:ZooKeeper 原理? ZooKeeper 怎么做的崩溃恢复? 什么是 Zab 协议? HashMap 底层实现? ConcurrentHashMap 原理?以及为什么要这样改进? 深挖 CAS?乐观锁?和 A…

如何利用成绩分析工具实现有效的教学反馈和改进?

成绩分析工具,成绩分析软件,成绩数据分析,免费的成绩分析工具,好用的成绩分析工具,推荐的成绩分析工具教学反馈和改进对于提高教育质量至关重要,而利用成绩分析工具可以帮助教师更好地了解学生的学习情况,并将这些数据转化为有效的反馈和改进措施。 本文将详细介绍如何利用成…

C++U4-04-递推2

上节课作业部分(点击跳转)排列组合排列 组合: 练习题目 题2 编程题1,用递推求组合数编程题3: [【递推】直线分割平面问题]【算法分析】 用 a[i] 表示 i 条直线最多能将这个圆分割成的部分数: 当 i=1 时,a[1]=2; 当 i=2 时,a[2]=4; 当 i=3 时,a[3]=7; 要分割成最多部分,…

DES对称加密算法Java实现

DES对称加密算法Java实现 源代码AESUtils.java //package me.muphy.util;import javax.crypto.*; import javax.crypto.spec.SecretKeySpec; import java.nio.charset.StandardCharsets; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmExcep…

H3C 交换机命名和端口

一: H3C交换机命名规则A:产品品牌 B:产品系列S-交换机 switchR-路由器 router C: 子产品系列10 以上控制转发新一代核心交换机9 机箱或汇聚交换机7 机箱式汇聚交换机5 全千兆盒式交换机3 千兆上行百兆下行盒式交换机 D:是否路由交换机>=5 路由交换机 <5 二层交换机 …

微服务系列-Spring Boot使用Open Feign 微服务通信示例

公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。前言 在前几个教程中我们已经看到: 使用 RestTemplate 的 Spring Boot 微服务通信示例 使用 WebClient 的 Spring Boot 微服务通信示例 在本教程中,我们将学习如何使用 Spring Cloud Open Feig…

微信小程序--swiper轮播图出现抖动问题

问题:在手机上,swiper的item一直在抖动,不滚动了。 官方: 解决方案:(参考别人的文章,放在离自己的项目代码里) wxml<view class="swiperBox" style="{{defaultData.indicatorColors}}"><swiperclass="slide-swiper"style="…

Istio:微服务开发的终极利器,你还在为繁琐的通信和部署流程烦恼吗?

Istio是一个为微服务架构带来革命性变化的工具。它简化了微服务之间的通信,提供了部署过程的便利性,并引入了灰度发布和故障注入等功能。本文通过bookinfo示例应用详细介绍了Istio的架构和部署过程,并讨论了使用OpenFeign或gRPC来简化微服务通信的建议。总之,Istio为微服务…

ubuntu:python:编译安装过程中的报错(python 3.12/ubuntu 23.10)

一,参考文档: https://devguide.python.org/getting-started/setup-building/#install-dependencies 主要是补充python所需依赖的开发库,如果这些库未安装,则在安装python的过程中就会报出下面所列的错误,安装依赖库的命令:ubuntu如下: sudo apt-get install build-essent…

Log4j配置文件详解(入门)

​ 目录Log4j 的配置 进一步解析Log4j配置文件 日志格式化 日志级别控制 日志输出目标 日志滚动策略 日志过滤器 日志追加器 异步日志记录 定制化日志格式 环境特定的配置 日志轮转1.Log4j允许你配置日志轮转,可以根据时间、文件大小或其他因素滚动备份日志文件,以便于管理和…

手把手教你用Java获取IP归属地

来源: 手把手教你用Java获取IP归属地前几个月微信公众号上线了IP归属地的功能,后续知乎、抖音等平台纷纷添加了该功能。如果是国内的用户精确到省份,国外用户精确到国家。本文就使用Java实现获取IP归属地。主要讲解几个步骤:Java获取请求IP 解决Nginx转发问题 通过IP地址获…

Mysql数据库的四大语言

1.数据定义语言(DDL):用来创建数据库各种对象——表,视图,索引,同义词等,DDL操作是隐形提交的,不能roolback(回滚)的。 隐式提交包括:alter,comment,quit,creat,drop,rename等 2.数据操作语言(DML):1、查询 select from where 组成的查询语句块 2、单行…

coreybutler/nvm-windows 简单使用

目录nvm是什么安装简单命令 nvm是什么Windows电脑node.js管理器。可以方便node.js的安装与切换。最新版本1.1.11 coreybutler/nvm-windows 有一个更高star的nvm是nvm-sh/nvm,没仔细研究。 安装 非常简单,下载Releases下的安装包,一步步安装即可,选好安装的位置即可。 最先下…

编译 Spartacus 6.0 时遇到的错误消息

错误消息如下:Compiling with Angular sources in Ivy partial compilation mode.projects/storefrontlib/shared/components/generic-link/generic-link.component.html:22:6 - error TS2322: Type string | null is not assignable to type string | undefined.切换回 Node.…
推荐文章