【问题标题】:EditForm seems not to be updated after adding a record, why添加记录后EditForm似乎没有更新,为什么
【发布时间】:2021-04-02 02:12:54
【问题描述】:

注意:这是我从 Github 问题 (See issue) 迁移而来的问题

这是一个以最简单的形式显示问题的项目:Code download

  1. 运行项目。
  2. 索引页上的注释名称。
  3. 使用表单添加一个新人。
  4. 证明新创建的人存在于索引列表中的通知消息,但实际上并未在组件中呈现。
  5. 导航到计数器,然后返回索引。
  6. 注意添加的人现在在列表中。

我在页面和组件中都尝试过使用/不使用 StateHasChanged() 调用。

页面:

public void OnCreated(Person person)
{
    _person = person;
    _created = true;
    Fake.People.Add(person);
    StateHasChanged();
}

组件:

private async Task CreateItem()
{
    _item = CreateFormItem<TItem>(_formProperties);
    await OnCreated.InvokeAsync(_item);
    StateHasChanged();
}

【问题讨论】:

    标签: blazor blazor-server-side


    【解决方案1】:
    private async Task CreateItem()
    {
        _item = CreateFormItem<TItem>(_formProperties);
        await OnCreated.InvokeAsync(_item);
        StateHasChanged();
    }
    

    StateHasChanged(); 的调用在这里毫无意义。

    public void OnCreated(Person person)
    {
        _person = person;
        _created = true;
        Fake.People.Add(person);
        StateHasChanged();
    }
    

    我会这样做:

    public async Task OnCreated(Person person)
       {
           Console.WriteLine(person.FirstName);
           _person = person;
           _created = true;
           Fake.People.Add(person);
    
           await InvokeAsync( () => StateHasChanged());
           
       }
    

    但罪魁祸首不是StateHasChanged方法

    解决方案:

    从 OnInitializedAsync 方法中移除这段代码 sn-p:

    _items = new List<Dictionary<string, object>>();
      foreach (var item in Items) _items.Add(GetItemProperties(item)); 
    
    

    并将其放在 OnParametersSetAsync 方法中:

    protected override async Task OnParametersSetAsync()
      {
          await base.OnParametersSetAsync();
         
          _items = new List<Dictionary<string, object>>();
          foreach (var item in Items) _items.Add(GetItemProperties(item));
         
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 2019-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多