blazor 组件未更新 |核心3.0
blazor component not updating | core3.0
正在尝试使用最新模板生成的解决方案。
- 拥有保留字符串列表的服务。
- 在 MainLayout.razor 和 NavMenu.razor
中注入服务
- 服务有简单的方法,即添加、删除、项目
- 在 MainLayout 中,使用 OnInitializedAsync() 添加一些项目
喜欢关注
.
protected override async Task OnInitializedAsync()
{
await Task.Run(() =>
{
this.svc.Add("string one");
this.svc.Add("string two");
});
await Task.Run(() => StateHasChanged());
}
在 NavMenu.razor 的 html 片段中,我很简单地尝试打印
@svc.Items.Count
使用上面的代码我没有看到计数得到 updated/refreshed,
我也可以在 MainLayout 中有另一个按钮处理程序来调用
svc.Add 方法,但计数未更新。
仅 当我尝试在 navMenu.razor 中使用一些 btn 处理程序时,blazor 会重新呈现自身
<button @onclick="SetCurrentTime"> Time </button>
<h4>@time</h4>
void SetCurrentTime()
{
time = DateTime.Now.ToLongTimeString();
}
github 这个问题的回购:(点击 AddString 并且计数器应该增加)https://github.com/pkaushik23/mycodeshares/tree/master/CheckRefreshBlazor
您的 NameService
应该通知更改。在 Invoke component methods externally to update state
上了解它
对于您的服务代码,类似于:
public class StringService
{
public event Func<string, Task> Notify;
public List<string> Names { get; set; } = new List<string>();
public void Add(string s)
{
this.Names.Add(s);
if (Notify != null)
{
await Notify.Invoke(s);
}
}
}
关于您的组件:
protected override void OnInitialized()
{
this.svc.Notify += OnNotify;
}
public async Task OnNotify(string s)
{
await InvokeAsync(() =>
{
StateHasChanged();
});
}
正在尝试使用最新模板生成的解决方案。
- 拥有保留字符串列表的服务。
- 在 MainLayout.razor 和 NavMenu.razor 中注入服务
- 服务有简单的方法,即添加、删除、项目
- 在 MainLayout 中,使用 OnInitializedAsync() 添加一些项目 喜欢关注
.
protected override async Task OnInitializedAsync()
{
await Task.Run(() =>
{
this.svc.Add("string one");
this.svc.Add("string two");
});
await Task.Run(() => StateHasChanged());
}
在 NavMenu.razor 的 html 片段中,我很简单地尝试打印
@svc.Items.Count
使用上面的代码我没有看到计数得到 updated/refreshed, 我也可以在 MainLayout 中有另一个按钮处理程序来调用 svc.Add 方法,但计数未更新。
仅 当我尝试在 navMenu.razor 中使用一些 btn 处理程序时,blazor 会重新呈现自身
<button @onclick="SetCurrentTime"> Time </button>
<h4>@time</h4>
void SetCurrentTime()
{
time = DateTime.Now.ToLongTimeString();
}
github 这个问题的回购:(点击 AddString 并且计数器应该增加)https://github.com/pkaushik23/mycodeshares/tree/master/CheckRefreshBlazor
您的 NameService
应该通知更改。在 Invoke component methods externally to update state
对于您的服务代码,类似于:
public class StringService
{
public event Func<string, Task> Notify;
public List<string> Names { get; set; } = new List<string>();
public void Add(string s)
{
this.Names.Add(s);
if (Notify != null)
{
await Notify.Invoke(s);
}
}
}
关于您的组件:
protected override void OnInitialized()
{
this.svc.Notify += OnNotify;
}
public async Task OnNotify(string s)
{
await InvokeAsync(() =>
{
StateHasChanged();
});
}