EditForm添加一条记录后好像没有更新,为什么

EditForm seems not to be updated after adding a record, why

注意:这是我从 Github 个问题 (See issue)

迁移而来的问题

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

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

我在页面和组件中都尝试了 with/without 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();
}
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 方法中删除此代码片段:

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