【问题标题】:Blazor Component Lifecycle - How do you do something async in the component after parameters are set but before they bindBlazor 组件生命周期 - 在设置参数之后但在绑定之前如何在组件中执行异步操作
【发布时间】:2021-05-25 00:31:36
【问题描述】:

我有一个对话框组件弹出来编辑网格的一行。

当您单击该行时,我设置了一个selectedItem 变量,该变量绑定到我的对话框组件的参数并使对话框可见。

<MyDialog @bind-MyObject="selectedItem" @bind-Visible="dialogVisible" />

问题是 MyDialog 组件需要从 selectedItem 获取一个属性,然后在 selectedItem 绑定到对话框中的所有字段之前对 API 进行异步调用并加载一些数据。

如果我在OnParametersSetAsync() 中调用API,为时已晚,selectedItem 已经绑定。

如果我尝试使用SetParametersAsync(ParameterView parameters),如果您在调用绑定参数的基本实现之前尝试执行异步操作,则会出现错误。

这似乎是一个相当正常的情况,这里有其他方法吗?

【问题讨论】:

  • 我没有绑定Visible 属性,而是将整个&lt;MyDialog&gt; 对象放在一个条件中:@if(dialogueVisible) { &lt;MyDialog. . . &gt;}

标签: blazor blazor-webassembly


【解决方案1】:

有条件地显示绑定的元素:

@if (_ready)
{
    <label>@MyObject.SomeProperty</label>
}

@code {
    [Parameter] public MyClass MyObject { get; set; }

    // Do not create elements bound to parameter until I say
    bool _ready = false;   

    protected override async Task OnParametersSetAsync()
    {
        await MyApi.GetSomeMoreData();
        // Done what I need to do, you can render the bound elements now
        _ready = true;   
    }
}

【讨论】:

  • 好主意,解决了我的问题,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-22
  • 2016-04-10
  • 2017-09-08
  • 2020-05-10
  • 1970-01-01
相关资源
最近更新 更多