从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>();
    
  • 希望侦听对此变量所做的更改的每个组件都可以这样做:
  • 在Blazor组件中注入(inject)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/

    10-17 00:40