Cascading Parameter变更是否会触发OnParametersSet事件?
Blazor级联参数变更是否触发OnParametersSet?
问题背景
我有一个尚未找到明确答案的技术问题。目前,我拥有用户“state”模型,通过Cascading Parameter将其传递给子组件,并在状态模型需要更新时使用如下代码处理:
private async void OnClientStateChanged(object? sender, PropertyChangedEventArgs e) { if (e.PropertyName == "propertyChanged" && sender is ClientState state) { _needsReselect = true; await InitScreen(); } }
核心问题
我更希望使用OnParametersSet方法,使其在用户状态的级联参数修改时被调用,因此我的问题是:
Cascading Parameter发生变更时,是否会触发OnParametersSet事件?我的测试中并未触发该事件。
临时解决方案
目前我用以下代码作为临时处理方案:
protected override void OnAfterRender(bool firstRender) { if (firstRender) { if (OperatingSystem.IsBrowser()) { clientStates!.PropertyChanged -= OnClientStateChanged; clientStates!.PropertyChanged += OnClientStateChanged; } } } private async void OnClientStateChanged(object? sender, PropertyChangedEventArgs e) { if (e.PropertyName == "SelectedViewLevel" && sender is ClientStates state) { await InitScreen(); } }
答案
Cascading Parameter的引用本身未发生变化时,不会触发OnParametersSet。只有当级联参数的引用类型实例被替换(比如重新new了一个ClientState对象),或者值类型的参数值改变时,Blazor才会检测到参数变更并调用OnParametersSet。
你的场景里,应该是只修改了ClientState对象内部的属性值,而对象本身的引用没变化,所以Blazor不会触发参数变更相关的生命周期方法。这也是为什么你需要通过订阅PropertyChanged事件来监听内部属性变化的原因。
如果想通过OnParametersSet触发,你需要保证每次修改状态时,都重新创建一个ClientState实例(替换引用),但这种方式可能会带来不必要的组件重渲染,不如订阅属性变更事件高效。
内容的提问来源于stack exchange,提问作者MX313
相关产品推荐
相关产品推荐

