首页 > 其他分享 >Blazor学习记录_8.预呈现__

Blazor学习记录_8.预呈现__

时间:2024-03-31 18:45:30浏览次数:23  
标签:__ currentCount 记录 呈现 渲染 private ApplicationState Blazor 页面

22. NET8中的预呈现

  • 预呈现是在服务器上初始呈现页面内容的过程(无需为呈现的控件启用事件处理程序)。服务器会根据初始请求尽快输出页面的HTML UI,这会让用户感觉应用提高了响应速度。预呈现还可以通过呈现搜索引擎用于计算网页排名的初始HTTP响应的内容,来改进搜索引擎优化(SEO)
    https://learn.microsoft.com/zh-cn/aspnet/core/blazor/components/prerender?view=aspnetcore-8.0
    没有预呈现效果就是,当页面初始化方法中要执行一些耗时任务时,整个页面的渲染必须等待这些耗时任务执行完毕,然后才能呈现。尤其在WebAssembly项目中,前面要下载整个程序集...
    预呈现试图过把耗时任务先暂时剥离,而尝试先呈现能够渲染的最初始的页面Html和CSS,比如先呈现页面框架,从而减少用户等待...

22.1 代码中开启预呈现的方法

从组件参数设置交互模式时,如代码:
<Perrender Title="开启预呈现" @rendermode="new InteractiveServerRenderMode(true)">
<Perrender Title="开启预呈现" @rendermode="new InteractiveWebAssemblyRenderMode(true)">

22.2 预呈现带来的负面问题

  • 22.2.1 在InteractiveServerRenderMode中,写在生命周期OnInitializedAsync()方法中的耗时任务,会在任务完成后,又渲染一次页面。
  • 22.2.2 两次渲染页面,会让第一次的页面中的元素值或都说某些状态被第二次渲染而覆盖,造成状态无法保持(比如第一次渲染产生了从随机函数获得了一个随机数,第二次渲染又会获得一次而且与第一次不同)。解决方法:Blazor为组件专们设计了一个用来进行状态持久化的类型 PersistentComponetState 它相当于一个单例的字典类型。如代码:
@page "/prerendered-counter-2"
@implements IDisposable
@inject ILogger<PrerenderedCounter2> Logger
@inject PersistentComponentState ApplicationState

<PageTitle>Prerendered Counter 2</PageTitle>
<h1>Prerendered Counter 2</h1>
<p role="status">Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

@code {
    private int currentCount;
    private PersistingComponentStateSubscription persistingSubscription;

    protected override void OnInitialized()
    {
        persistingSubscription =
 ApplicationState.RegisterOnPersisting(PersistCount);
        if (!ApplicationState.TryTakeFromJson<int>(
            nameof(currentCount), out var restoredCount))
        {
            currentCount = Random.Shared.Next(100);
            Logger.LogInformation("currentCount set to {Count}", currentCount);
        }
        else
        {
            currentCount = restoredCount!;
            Logger.LogInformation("currentCount restored to {Count}", currentCount);
        }
    }
    private Task PersistCount()
    {
        ApplicationState.PersistAsJson(nameof(currentCount), currentCount);
        return Task.CompletedTask;
    }
    void IDisposable.Dispose() => persistingSubscription.Dispose();
    private void IncrementCount()
    {
        currentCount++;
    }
}

如果渲染模式是在组件定义时指定的,则无法在组件使用时使用预呈现。

标签:__,currentCount,记录,呈现,渲染,private,ApplicationState,Blazor,页面
From: https://www.cnblogs.com/hrx521/p/18107056

相关文章

  • 2.python 基本数据类型
    #python基本数据类型#python中等号用来给变量赋值counter=100#整形变量miles=1000.0#浮点型变量name="runoob"#字符串print(counter)print(miles)print(name)#python允许同时为多个变量赋值a=b=c=1print(a)print(b)print(c)#为多个对......
  • 便民查询 - C++也能写H5应用
    这款应用是我和我的一位粉丝共创,他还在读大二,刚学了C++,他一直都想找个靠谱的项目练练手,刚好我准备做一款便民查询的应用,当然这个应用如果用C++来写后端,会有一种大炮打蚊子的感觉,C++也不适合做APP开发,开发效率和debug容易度都比其他的高级语言差一截。但是由于他想找个项目练手,我......
  • 3.python 数据类型转换
    #python数据类型转换"""python数据类型转换可以分为两种:隐式类型转换-自动完成显示类型转换-需要使用类型函数来转换"""#隐式类型转换(自动类型转换)#隐式类型转换中,python会自动将一种数据类型转换为另一种数据类型。#转换规则:低精度向高精度转换(bool->int->......
  • 查看Centos 网卡MAC地址
    方法一:IP命令iplinkshow如果知道具体网卡如eth0,iplinkshoweth0或者ipaddr如果知道具体网卡如eth0,ipaddrshoweth0方法二:ifconfig命令ifconfig-a如果知道具体网卡如eth0,ifconfigeth0以上方法在输出中,你会看到网卡的MAC地址列在link/ether后面。例如:ether00......
  • VRRP原理及配置
    一.技术背景一个终端只能配置一个网关,若是遇到一个网关故障时,就可能让全网设备全部都陷入故障状态,为了防止这种情况,就产生了VRRP应用。单点故障:因为某一个设备故障导致全网故障的情形叫单点故障。二.VRRP原理1.概述:(1)VRRP(VirtualRouterRedundancyProtocol,虚拟路由器......
  • C++ vector
    文章目录vector的介绍vector介绍vector的定义vectoriterator的使用vector空间增长问题vector的增删查改vector的模拟实现创建vector类和成员变量iterator迭代器范围for构造函数赋值、析构空间容量resize和reserve的区别下标操作符重载插入删除交换vector深度剖析v......
  • CodeTON Round 8 (Div. 1 + Div. 2)
    ProblemA显然\(k=1,n\)时才有解。ProblemB倒序扫一遍即可。ProblemC1(2)C1直接相邻为\(1\)的能用,否则不算。C2就是把间隔挖出来,奇偶分别选择。ProblemD直接记录每个状态的\(k\)优解,然后堆转移。ProblemE假设两种牛之间的间隔大小分别为\(g_i\)。首先......
  • FL Studio20.0中文汉化包补丁器下载2024最新版本
    FLStudio官方中文版已经上线,FLStudio20.8版本起开始支持简体中文,但推荐使用windows10系统安装,Windows7系统设置FLStudio语言为中文时若出现乱码,可以将Win10系统中的“微软雅黑”字体复制并安装进Win7系统电脑中!FLStudio20.8.2版本更新后支持Rosetta2,在Rosetta的支持......
  • Minlexes题解
    \(\texttt{ProblemLink}\)简要题意在一个字符串\(s\)中,对于每个后缀,任意删掉一些相邻的相同的字符,使得字符串字典序最小。注意:删掉之后拼起来再出现的相邻相同字符不能够删除。思路倍增好题。发现存在局部最优解(最优子结构),并且可以转移到其它结点,可以考虑使用dp。那就......
  • FL Studio21.2.3官方中文汉化版无需破解激活
    FLStudio21.2中文版的适用人群非常广泛,主要包括以下几类:FLStudio21Win-安装包下载如下:https://wm.makeding.com/iclk/?zoneid=55981FLStudio21Mac-安装包下载如下:https://wm.makeding.com/iclk/?zoneid=55982音乐制作人:无论是专业的音乐制作人,还是音乐创作爱好者......