从VueJS的背景到Blazor,我找不到与Blazor中的Vue监视程序等效的工具。
详细说来,在Vue中,人们可以监视某个属性的更改,例如:
watch: {
somethingId(newValue) {
// Do something, this actually watches the somethingId for change and trigger this function
}
}
我似乎找不到与Blazor等效的东西,我试图使用自定义属性的getter / setter来实现这一点,但这并不在所有情况下都有效(实际上更类似于vue中的计算属性,而不是手表)。有没有办法做到这一点?
最佳答案
根据ASP.NET Github Repository上的团队,此功能在Blazor中不可用。
我最终实现了一个状态容器(与VueJS中的Vuex类似的概念)来存储我要观察的通用值(而不是将它们作为Parameters
传递)并在其更改时引发事件。记录在ASP.NET Core Blazor state management中。
假设我们需要观看/观察对somethingId
的更改,类似于上面的示例:
SomethingStateContainer
类:public class SomethingStateContainer
{
public event Action<int> OnSomethingIdChanged; // Or any type, here SomethingId is an int
private int _somethingId = 0;
public int SomethingId {
get => _somethingId;
set {
_somethingId = value;
OnSomethingIdChanged?.Invoke(value);
}
}
}
然后将此服务作为单例添加到Program.cs
中(如果使用Blazor WebAssembly):builder.Services.AddSingleton<SomethingStateContainer>();
SomethingStateContainer
:@inject SomethingStateContainer SomethingStateContainer
protected override async Task OnInitializedAsync()
{
SomethingStateContainer.OnSomethingIdChanged += YourCallbackFunction;
}
public void Dispose()
{
SomethingStateContainer.OnSomethingIdChanged -= YourCallbackFunction;
}
YourCallbackFunction
是您希望执行的功能(在这种情况下,它将int
作为输入):private void YourCallbackFunction(int id)
{
// Do something
}
关于vue.js - Blazor-等同于Vue Watch的参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64373365/