EditForm添加一条记录后好像没有更新,为什么
EditForm seems not to be updated after adding a record, why
注意:这是我从 Github 个问题 (See issue)
迁移而来的问题
这是一个以最简单形式显示问题的项目:Code download
- 运行 项目。
- 在索引页上记下姓名。
- 使用表单添加新人。
- 通知消息证明新创建的人存在于索引的列表中,但实际上并未在组件中呈现。
- 导航至计数器,然后返回索引。
- 注意添加的人现在在列表中。
我在页面和组件中都尝试了 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));
}
注意:这是我从 Github 个问题 (See issue)
迁移而来的问题这是一个以最简单形式显示问题的项目:Code download
- 运行 项目。
- 在索引页上记下姓名。
- 使用表单添加新人。
- 通知消息证明新创建的人存在于索引的列表中,但实际上并未在组件中呈现。
- 导航至计数器,然后返回索引。
- 注意添加的人现在在列表中。
我在页面和组件中都尝试了 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));
}