我正在尝试在Blazor Server中拥有一个共享的State组件:
public class ProgressState
{
public string SelectedForm { get; private set; }
private event Action _onSetForm;
private event Action<int> _onStep;
public void SetForm(string form)
{
if (SelectedForm != form)
{
SelectedForm = form;
NotifyStateChanged();
}
}
public void OnSetForm(Action action)
{
if (_onSetForm.NotContains(action))
_onSetForm += action;
}
public void OnStep(Action<int> action)
{
if (_onStep.NotContains(action))
_onStep += action;
}
public void Step(int step) => _onStep?.Invoke(step);
private void NotifyStateChanged() => _onSetForm?.Invoke();
}
在子组件中,我调用例如
public void SetForm(string form)
在父组件中,我设置了一些组件属性,并这样调用StateHasChanged:
private async void FormChanged()
{
if (ProgressState.SelectedForm != selectedForm)
await InvokeAsync(() =>
{
selectedForm = ProgressState.SelectedForm;
StateHasChanged();
});
}
它只是不刷新父组件,我最终使用了 EventCallback 。
任何想法我该如何解决?这是一个简单的示例,也许根本不需要共享状态,但是如果想了解一些复杂的情况,我想在将来学习。
谢谢!