blazor - 无法再读取 ParameterView 实例,因为它已过期。ParameterView 只能同步读取,不能存储
问题描述
重写 SetParametersAsync 时,如果我调用任何异步方法,则会得到“未处理的异常呈现组件:ParameterView 实例已过期,无法再读取。ParameterView 只能同步读取,不得存储以备后用。”
public override async Task SetParametersAsync(ParameterView parameters)
{
await Task.Delay(1000);
await base.SetParametersAsync(parameters);
}
我们如何安全地调用 SetParamatersAsync 中的异步方法?
解决方案
我相信您正在寻找的编码模式如下所示。错误消息由渲染器生成。它传入ParameterView
,跟踪它,并期望它立即(同步)被消耗。对象内的参数可能在一秒钟内就非常陈旧。
在我们parameters
立即使用的模式中,将其应用于组件实例属性。然后我们可以base
在闲暇时调用,传递一个空ParameterView
的,因为我们已经设置了它们。
public async override Task SetParametersAsync(ParameterView parameters)
{
parameters.SetParameterProperties(this);
await Task.Delay(100);
await base.SetParametersAsync(ParameterView.Empty);
}
public override Task SetParametersAsync(ParameterView parameters)
{
parameters.SetParameterProperties(this);
... Do things
return base.SetParametersAsync(ParameterView.Empty);
}
这是 ASPNetCore 团队似乎使用的模式。您可以在InputBase-line 190 以上的代码中看到它。
推荐阅读
- javascript - Jquery获取选中的项目返回未选中的框?
- javascript - VueJS:使用axios获取数据后未定义数组的属性
- python - 计算长度为 n 的随机数的实例
- python - Excel 文件未保存在 heroku 服务器上(Flask 应用程序)
- javascript - 一次激活一个按钮的切换
- envoyproxy - lua envoyFilter 在 istio-sidecar 中被忽略
- azure-devops - Azure DevOps REST API 获取请求不起作用
- node.js - 集成请求 aws api-getway 中的正确模板映射应该是什么?
- excel - 如何在不拖动的情况下使用自动更新公式
- c++ - 对 > `std::ostream::operator<<(unsigned long)' 的未定义引用