--- sidebar_position: 4 title: Use data --- ## Retrieve data In order to use the data in the `fake-data.json` file, we will use the `GetFromJsonAsync` method of the `HttpClient` object. This method allows to obtain and to convert (Deserialization) the data of the file in a list containing our data. ## Add default http client Open the `Program.cs` file and add the highlighted line. ```csharp title="Program.cs" builder.Services.AddSingleton(); // highlight-next-line builder.Services.AddHttpClient(); var app = builder.Build(); ``` This addition allows to define an `HttpClient` for the Blazor application. ## Page code Open the `List.razor.cs` class and fill it as follows: ```csharp title="Pages/List.razor.cs" public partial class List { // highlight-start private Item[] items; [Inject] public HttpClient Http { get; set; } [Inject] public NavigationManager NavigationManager { get; set; } protected override async Task OnInitializedAsync() { items = await Http.GetFromJsonAsync($"{NavigationManager.BaseUri}fake-data.json"); } // highlight-end } ``` The `OnInitializedAsync` method fires when the page is displayed, see the concept "Lifecycle events" further down this page. ## Show data First we will perform a simple display of our data. To do this, open the `List.razor` file and fill it in as follows: ```cshtml title="Pages/List.razor" @page "/list"

List

// highlight-start @if (items != null) { foreach (var item in items) {
@item.Id
} } // highlight-end ``` You have now displayed the list of the value of the `Id` field in your page. :::caution Be careful, remember to check if your list is not null before doing your `foreach`. Otherwise an error will be thrown. ::: ## Concept: Life cycle events The following diagrams illustrate the Razor component lifecycle events. Component lifecycle events: * If the component is rendered for the first time on a request: * Create the component instance. * Perform property injection. Run `SetParametersAsync`. * Call OnInitialized{Async}. If an Incomplete Task is returned, the Task is awaited, then the component is re-rendered. * Call OnParametersSet{Async}. If an Incomplete Task is returned, the Task is awaited, then the component is re-rendered. * Render for all synchronous jobs and all Tasks. ![Événements de cycle de vie](/img/affichage-donnees/lifecycle1.png) Document Object Model (DOM) event processing: * The event handler is executed. * If an Incomplete Task is returned, the Task is waited for, then the component is re-rendered. * Render for all synchronous jobs and all Tasks. ![Événements de cycle de vie](/img/affichage-donnees/lifecycle2.png) The Render lifecycle: * Avoid additional rendering operations on the component: * After the first rendering. * When ShouldRender is false . * Generate render tree (difference) and component render. * Wait for the DOM to update. * Call OnAfterRender{Async} . ![Événements de cycle de vie](/img/affichage-donnees/lifecycle3.png)