blazor组件未更新| core3.0

时间:2019-09-22 15:32:19

标签: blazor blazor-client-side

尝试使用最新模板生成的解决方案。

  • 在服务中保留字符串列表。
  • 将服务同时注入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

  • 使用上面的代码,我看不到计数得到更新/刷新, 我也可以在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

enter image description here

1 个答案:

答案 0 :(得分:1)

您的 (venv) username@myubuntu:~/Projects/MyProject/$ pip list DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning. asn1crypto (0.24.0) cryptography (2.1.4) decorator (4.1.2) enum34 (1.1.6) idna (2.6) ipaddress (1.0.17) keyring (10.6.0) keyrings.alt (3.0) networkx (1.11) numpy (1.13.3) pip (9.0.1) pycrypto (2.6.1) pycryptodome (3.9.0) pygobject (3.26.1) pyxdg (0.25) PyYAML (3.12) rubber (1.4) SecretStorage (2.3.1) setuptools (39.0.1) six (1.11.0) wheel (0.30.0) 应该通知更改。在Invoke component methods externally to update state

上了解它

对于您的服务代码,类似:

NameService

在您的组件上:

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);
        }            
    }
}