簡體   English   中英

StateHasChanged 未更新組件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM