blazor - Blazor 中是否有“OnParameterChanged”事件?
问题描述
当我的 Blazor 组件中的参数发生更改时,我想做一些事情。如果不是太多,我可以在二传手中完成。但是,如果我想做更多的事情,也许在后台线程中,我不能(不应该)在 setter 中做。
我知道 OnParameterSetAsync,但我怎么知道设置了什么参数?我可以让它工作(见下文),但想知道是否有更好的方法?
这是我的组件:
// ReactOnParameterUpdate.razor
<h2>@Message</h2>
@code
{
[Parameter]
public string Input { get; set; }
protected string Message = "";
private string _previousInput = null;
protected override async Task OnParametersSetAsync()
{
if (_previousInput != Input)
{
_previousInput = Input;
await SomeAsyncMethod();
}
}
private async Task SomeAsyncMethod()
{
Message = $"Async method was called at {DateTime.Now}";
await Task.CompletedTask;
}
}
并且这里使用了该组件:
// Index.razor
@page "/"
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text">Input:</span>
</div>
<input type="text" class="form-control" @bind="@Input">
</div>
<ReactOnParameterUpdate Input=@Input></ReactOnParameterUpdate>
@code
{
protected string Input;
}
编辑:根据下面的建议和完整性,这里是如何使用 SetParametersAsync:
public override async Task SetParametersAsync(ParameterView parameters)
{
foreach (var param in parameters)
{
if (param.Name == nameof(Input) && (string)param.Value != Input)
{
await SomeAsyncMethod();
}
}
await base.SetParametersAsync(parameters);
}
解决方案
您可以使用循环查看已更改的属性。希望这可以帮助。
@code {
[Parameter]
public Foo Foo { get; set; }
public override async Task SetParametersAsync(ParameterView parameters)
{
foreach(var prm in parameters)
{
Console.WriteLine($"Name: {prm.Name}");
Console.WriteLine($"Value: {prm.Value?.ToString()}");
}
await base.SetParametersAsync(parameters);
}
}
推荐阅读
- c - 在 bash 中捕获程序的终止
- python - 如何使用 datetime 在 python 中将 19.129494 打印为 19.1 秒或 19 秒
- python - 从 sys.stdin 读取,用 RETURN 结束用户输入
- javascript - 将道具传递给动态 TabNavigator
- javascript - 如何滚动固定的双导航栏?
- ios - 如何仅针对横向禁用 UIPageViewController 的分页?
- javascript - 使用 @babel/standalone 时 JavaScript 堆内存不足
- ios - 调试信息“DWARF”和崩溃日志
- javascript - 如何添加指向 Google GeoChart 地图的链接?
- javascript - MongoDB 的聚合函数有问题,得到错误消息不明白为什么