【问题标题】:Blazor Server-Side variable doesn't update after function call because of OnAfterRenderAsync由于 OnAfterRenderAsync,Blazor 服务器端变量在函数调用后不更新
【发布时间】:2021-05-25 12:40:28
【问题描述】:

我有一个带有简单 index.razor 页面的服务器端 Blazor 应用程序。我的目标是阅读 sessionStorage 并使用它的内容。但现在我正在尝试逐步了解发生了什么。

这是html

@inject Blazored.SessionStorage.ISessionStorageService sessionStorage

<button @onclick="TestInc">TEST</button>
<h1>@tutu</h1>

我只有一个文本来显示数字和一个简单的按钮来增加我的价值 这是代码

@code {
    private int tutu = 0;
    public string sNom;

    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if (firstRender)
        {
            bool isConnected = await sessionStorage.GetItemAsync<bool>("isConnected");
            //if (!isConnected)
            //{
            //    NavManager.NavigateTo("/Login", forceLoad: true);
            //}
            sNom = sessionStorage.GetItemAsync<string>("Nom").Result;
        }
    }
    private void TestInc()
    {
        tutu += 1;
    }
}

由于某种原因,如果我注释整个 OnAfterRenderAsync 函数,代码可以正常工作。当我单击按钮时,该页面将显示计数器并更新它。但是,如果我没有注释函数 OnAfterRenderAsync 并执行此操作,则计数器根本不会更新,并且如果我在 TestInc 中放置一个断点,它永远不会到达它。

我对 Blazor 比较陌生,所以我可能在这里遗漏了一些非常明显的东西。

我真正想要实现的是获取 sessionStorage 变量(例如用户名)并将其显示在我的 HTML 中,而无需单击按钮或重新加载页面

【问题讨论】:

  • 记得拨打base.OnAfterRenderAsync
  • 我应该在哪里称呼它?在文档中没有提到docs.microsoft.com/en-us/aspnet/core/blazor/components/…
  • 无复制。重新开始并进行最小的更改,上面发布的代码,看看您是否可以证明您的问题。见minimal reproducible example
  • 调用基本方法是一种最佳实践,但我认为这不是问题所在。
  • de 代码中的布尔 IsConnected 是否发生变化?如果不是,问题可能出在应用程序的核心,例如缺少脚本。

标签: c# blazor blazor-server-side


【解决方案1】:

解决方法很简单:

//sNom = sessionStorage.GetItemAsync<string>("Nom").Result;
sNom = await sessionStorage.GetItemAsync<string>("Nom");
  1. 切勿使用.Result.Wait()
  2. 始终以不间断的“等待链”为目标
  3. 将“缺少等待”和“未等待”警告视为错误。

【讨论】:

  • 是的,就是这样,.Result 导致了死锁和/或这种奇怪的无响应行为
【解决方案2】:

如果您的 sessionStorage 有一个名为 Nom 的项目,这将起作用

sNom = await sessionStorage.GetItemAsync<string>("Nom");

【讨论】:

  • 就是这样,我想尝试 .Result 不使用 await 和 Async 方法。事实证明这是一个非常糟糕的主意
猜你喜欢
  • 1970-01-01
  • 2020-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-17
  • 1970-01-01
  • 1970-01-01
  • 2020-04-06
相关资源
最近更新 更多