Blazor Server单线程模拟是否忽略JavaScript互操作?Mask参数更新致JS代码多次执行问题求助
Blazor Server单线程模拟是否忽略JavaScript互操作?Mask参数更新致JS代码多次执行问题求助
各位大佬好,今天我碰到一个挺头疼的问题:我开发了一个封装JS库的Blazor组件,这个组件会影响Blazor的绑定值,现在发现更新Mask参数时,JavaScript代码会执行多次,想请教下是不是Blazor Server的单线程模拟忽略了JS互操作的情况?
具体场景和代码如下:
我在组件里定义了这些参数和私有变量:
[Parameter] public string Value { get; set; } [Parameter] public EventCallback<string> ValueChanged { get; set; } [Parameter] public Mask Mask { get; set; } private Mask _mask; private bool _maskNeedsUpdate;
然后在生命周期方法里处理参数变化和JS调用:
protected override void OnParametersSet() { // ... Handle other parameters. if (_mask != Mask) { _mask = Mask; _maskNeedsUpdate = true; } } protected override async Task OnAfterRenderAsync(bool firstRender) { // ... initialize JS mask on first render. if (_maskNeedsUpdate) { var valueAfterUpdate = await Js.InvokeAsync<string>("updateMask", _mask); if (valueAfterUpdate != Value) { await ValueChanged.InvokeAsync(valueAfterUpdate); // 原代码此处截断,补全逻辑 } } }
问题就是,每次更新Mask参数的时候,updateMask这个JS方法都会被调用好几次,完全不符合预期。我有点困惑,Blazor Server不是模拟单线程执行组件逻辑吗?会不会是JS互操作的异步操作触发了组件的重新渲染,导致OnAfterRenderAsync重复执行?
有没有大佬遇到过类似的问题,或者能帮我看看代码里哪里有问题?
备注:内容来源于stack exchange,提问作者micka190
相关产品推荐
相关产品推荐

