全栈 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(true)]

保留组件状态

可以使用现有 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

.Net8 Blazor 尝鲜的更多相关文章

  1. 基于 Blazui 的 Blazor 后台管理模板 BlazAdmin 正式尝鲜

    简介 BlazAdmin 是一个基于Blazui的后台管理模板,无JS,无TS,非 Silverlight,非 WebForm,一个标签即可使用. 我将在下一篇文章讨论 Blazor 服务器端渲染与客 ...

  2. 尝鲜一试,Azure静态网站应用服务(Azure Static Web Apps) 免费预览,协同Github自动发布静态SPA

    背景 最近在浏览微软的文档的时候发现,微软喜欢用Hugo这个文档框架,有些技术产品的文档页面就用Hugo来做的,同时搭配Github + Azure Static Web Apps Service这个 ...

  3. Windows 10 周年版尝鲜

    早在今年的 Build 大会上,微软就开始宣传最新的 Windows 10 周年版更新,炫了不少特技,直到昨天(2016/8/2 PST)才正式放出,相关新闻可以参考这里,正式的版本为 Version ...

  4. 【翻译】五步快速使用LINQPad尝鲜StreamInsight

    StreamInsight  学习地址:http://www.cnblogs.com/StreamInsight/archive/2011/10/26/StreamInsight-Query-Seri ...

  5. 小程序新能力-个人开发者尝鲜微信小程序

    个人开发者的福利 微信小程序,刚听到这个新名词的时候,我就兴冲冲的去找入口,看看自己能不能搞个微信小程序的HelloWorld,毕竟能在微信上把自己写的一些小工具跑起来还是满炫酷的. 没想,网上一查, ...

  6. 【响应式】foundation栅格布局的“尝鲜”与“填坑”

      提到响应式,就不得不提两个响应式框架--bootstrap和foundation.在标题上我已经说明白啦,今天给大家介绍的是foundation框架. 何为"尝鲜"?就是带大伙 ...

  7. Spring-Data-JPA尝鲜:快速搭建CRUD+分页后台实例

    前言:由于之前没有接触过Hibernate框架,但是最近看一些博客深深被它的"效率"所吸引,所以这就来跟大家一起就着一个简单的例子来尝尝Spring全家桶里自带的JPA的鲜 Spr ...

  8. 微信团队分享:Kotlin渐被认可,Android版微信的技术尝鲜之旅

    本文由微信开发团队工程是由“oneliang”原创发表于WeMobileDev公众号,内容稍有改动. 1.引言   Kotlin 是一个用于现代多平台应用的静态编程语言,由 JetBrains 开发( ...

  9. Linux下尝鲜IDE Rider .NET又一开发利器

    RiderRS 扯淡:很多人说:jetbrains出品,必属精品,jetbrains确实出了不少好东西,但是他的产品总感觉越用越慢,我的小Y430P高配版也倍感压力,内存占用率高. Multiple ...

  10. Win10尝鲜体验——初识传说中不一样的Windows 分类: 资源分享 2015-07-24 18:27 13人阅读 评论(0) 收藏

    这几天,网上传来一个消息,虽然不知是好是坏,Win10可以下载安装了! 出于好奇,下载尝鲜,几个截图,留作纪念~ 中文,还是要好好支持的,毕竟中国有如此多的用户 可选的安装版本 许可条款也刚刚出炉,估 ...

随机推荐

  1. Mysql高级3-索引的结构和分类

    一.索引概述 1.1 索引的介绍 索引index:是帮助 Mysql 高效获取数据 的 有序的数据结构,在数据之外,数据库系统维护着的满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据 ...

  2. python 镜像

    https://pypi.douban.com/simple/   豆瓣源 pip install -i https://pypi.douban.com/simple/ pymysql # pymys ...

  3. 记一次 .NET某培训学校系统 内存碎片化分析

    一:背景 1. 讲故事 前些天有位朋友微信上找到我,说他们学校的Web系统内存一直下不去,让我看下到底是怎么回事,老规矩让朋友生成一个dump文件丢给我,看一下便知. 二:WinDbg 分析 1. 托 ...

  4. G-channel 实现低光图像增强

    G-channel 之前研究低光图像增强时,看到一篇博客,里面介绍了一种方法,没有说明出处,也没有说明方法的名字,这里暂时叫做 G-channel 算法. 博客地址:低照度图像增强(附步骤及源码)_低 ...

  5. 「Go笔记-02」变量、数据类型、数据类型间转换、进制转换...看这一篇就Go了

    前言 一个程序就是一个世界,不论是使用哪种高级程序语言编写程序, 变量都是其程序的基本组成单位, 变量 在 go 中 变量是用于存储数据的命名空间(内存位置),它可以表示一个值,这个值在程序执行过程中 ...

  6. Programming abstractions in C阅读笔记p111-p113: boilerplate

    <Programming Abstractions In C>学习第47天,p111-p113,总结如下: 一.技术总结 1.boilerplate /* * File: random.h ...

  7. C#程序变量统一管理例子 - 开源研究系列文章

    今天讲讲关于C#应用程序中使用到的变量的统一管理的代码例子. 我们知道,在C#里使用变量,除了private私有变量外,程序中使用到的公共变量就需要进行统一的存放和管理.这里笔者使用到的公共变量管理库 ...

  8. 「BJWC2012」冻结题解

    「BJWC2012」冻结题解 一.题目 "我要成为魔法少女!" "那么,以灵魂为代价,你希望得到什么?" "我要将有关魔法和奇迹的一切,封印于卡片之中 ...

  9. 【日常踩坑】修复 chrome 打不开微信或者部分第三方应用内链接

    目录 默认浏览器为 chrome 时,打不开微信或者部分第三方应用内链接(或者没有反应) 修复问题:卸载 KGChromePlugin 参考资料 默认浏览器为 chrome 时,打不开微信或者部分第三 ...

  10. shopee的前景以及商用API(代码封装)

    Shopee平台是东南亚和台湾地区最具代表性的电商平台之一,在过去几年里取得了巨大的成功.以下是Shopee平台的发展前景: 电商市场的快速增长:东南亚和台湾地区是人口众多.市场潜力巨大的区域,电商市 ...