Quantcast
Channel: Active questions tagged blazor - Stack Overflow
Viewing all articles
Browse latest Browse all 4839

Hide and show components in blazer using timer

$
0
0

I have two Blazor custom components, Hello World 1, and Hello World 2, and a background UI timer on the razor page to hide and show components to demonstrate the proper use of StateChange and Invoke. However, the two components do not toggle the state in 3 seconds.

Index.razor

@page "/index"<h3>Background Timer Example</h3>@if (showComponent){<div class="alert alert-success" role="alert">    This is a visible component!</div>}<HelloWorld1 @ref="helloWorld1" /><HelloWorld2 @ref="helloWorld2" /><button class="btn btn-primary" @onclick="ToggleComponent">Toggle Component</button>@code {  private bool showComponent = true;  private bool showHelloWorld1 = true;  private bool showHelloWorld2 = true;  private HelloWorld1 helloWorld1;  private HelloWorld2 helloWorld2;  // Timer interval in milliseconds  private const int TimerInterval = 3000;  private System.Threading.Timer timer;  protected override void OnInitialized()  {    // Initialize the timer when the component is first initialized    timer = new System.Threading.Timer(ToggleComponentVisibility, null, TimerInterval, TimerInterval);  }  private async void ToggleComponentVisibility(object state)  {    // Toggle the visibility of the component    showComponent = !showComponent;    // Toggle the visibility of HelloWorld1 component    showHelloWorld1 = !showComponent;    // Toggle the visibility of HelloWorld2 component    showHelloWorld2 = !showComponent;    // Notify the framework that the state has changed    await InvokeAsync(() => StateHasChanged());  }  private async Task ToggleComponent()  {    // Toggle the visibility of the component    showComponent = !showComponent;    showHelloWorld1 = !showComponent;    showHelloWorld2 = !showComponent;    // Notify the framework that the state has changed    // Note: Use InvokeAsync for thread safety    await InvokeAsync(() => StateHasChanged());  }  // Dispose the timer when the component is disposed  public void Dispose()  {    timer.Dispose();  }}

HelloWorld1.razor

<h4>Hello from HelloWorld1!</h4>@if (!showHelloWorld1){<p>Hidden!</p>}else{<p>Visible!</p>}@code {    [Parameter]    public bool showHelloWorld1 { get; set; }}

HelloWorld2.razor

<h4>Hello from HelloWorld2!</h4>@if (!showHelloWorld2){<p>Hidden!</p>}else{ <p>Visible!</p>}@code {    [Parameter]    public bool showHelloWorld2 { get; set; }}

Viewing all articles
Browse latest Browse all 4839

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>