[英]StateHasChanged not updating component
我有兩個組件,一個用於列出所有學生,另一個顯示所選學生的詳細信息。
以下是兩者的父組件:
<p> Id of student @id </p>
<Students onStudentSelected="@getStudentId"> </Students>
<Student StudentId="@id"> </Student>
@code {
private int id;
private void getStudentId (int e) {
id = e;
stateHasChanged();
}
}
現在事情是這樣的, <Students> </Students>
組件可以正常工作,即我可以看到學生列表,當單擊一個時,學生的 id 被分配給id
並顯示在<p></p>
標簽。
但是<Student> </Student>
組件並不令人耳目一新。 如果我手動給 Student 組件一個 id,那么我可以看到 Student 的詳細信息。
所以,出於某種原因stateHasChanged();
在這里沒有效果。
如果你想看看這兩個組件長什么樣子,很簡單:
學生
@foreach(var std in StudentsJSON) {
<p @onclick="() => selectStudent(std.id)"> @std.name </p>
}
@code {
[Parameter]
public EventCallback<int> onStudentSelected { get; set; }
async Task selectStudent(int e){
await onStudentSelected.InvokeAsync(e)
// StateHasChanged(); tried here doesn't work
}
}
學生
@using Newtonsoft.Json
@using System.Net.Http.Headers
@if(JsonResponseContent == null) {
<p> No student found </p>
}else{
@foreach(var st in JsonResponseContent) {
<p> @st.age / @st.name / @st.subject </p>
}
}
@code {
[Parameter] public int id { get; set; }
Student JsonResponseContent;
protected override async Task OnInitializedAsync(){
using (HttpClient client = new HttpClient())
{
...
JsonResponseContent = JsonConvert.DeserializeObject<Student>(ResponseContent);
}
}
}
我不知道為什么刷新不起作用。
在OnParametersSetAsync()
方法中的Student
組件調用 api
protected override async Task OnParametersSetAsync(){
using (HttpClient client = new HttpClient())
{
...
JsonResponseContent = JsonConvert.DeserializeObject<Student(ResponseContent);
}
}
}
OnInitializedAsync
在組件生命周期中僅調用一次,而OnParametersSetAsync
每次參數值更改時(在您的示例id
中)。 更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.