在Blazor中,如果父组件的状态(AppState)的值发生了变化,但是子组件并没有更新,可以采用以下两种方法解决:
public class ChildComponent : ComponentBase
{
[Parameter]
public AppState AppState { get; set; }
private int _cachedValue;
protected override async Task OnParametersSetAsync()
{
if (_cachedValue != AppState.Value)
{
_cachedValue = AppState.Value;
// do something else
await InvokeAsync(StateHasChanged);
}
}
}
public class ParentComponent : ComponentBase
{
[Inject]
public IEventAggregator EventAggregator { get; set; }
private AppState _appState = new AppState();
protected override void OnInitialized()
{
EventAggregator.Subscribe(OnAppStateValueChanged);
}
private async void OnAppStateValueChanged(AppStateValueChangedEvent obj)
{
await InvokeAsync(StateHasChanged);
}
private void IncrementValue()
{
_appState.Increment();
EventAggregator.Publish(new AppStateValueChangedEvent());
}
}
public class ChildComponent : ComponentBase, IDisposable
{
[Inject]
public IEventAggregator EventAggregator { get; set; }
[Parameter]
public AppState AppState { get; set; }
private int _cachedValue;
protected override void OnInitialized()
{
EventAggregator.Subscribe(OnAppStateValueChanged);
}
private async void OnAppStateValueChanged(AppStateValueChangedEvent obj)
{
if (_cachedValue != AppState.Value)
{