Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

367
Views
¿Cómo puedo guardar una instancia de Blazor Component en una variable y representarla en mi .cshtml?

Teniendo en cuenta que tengo una clase llamada Tab .

 public class Tab { public Guid Id { get; } public bool IsVisible { get; set; } protected Tab() { Id = Guid.NewGuid(); } }

Quiero acoplar estrictamente estas pestañas a una instancia de Blazor Component y representar esas instancias iterando sobre las pestañas. Quiero tener control sobre cuándo se crea un Componente y cuándo se destruye nuevamente.

Quiero hacer esto porque de esa manera puedo conservar el estado de cada componente.

Aquí está el problema con el enfoque fácil. Teniendo en cuenta algo como esto:

 @code { public void CreateNewTabAndRemoveOldTab() { Tabs.RemoveAt(0); Tabs.Add(new Tab()); } } foreach (var tab in Tabs) { <MyTabComponent/> }

La pestaña recién creada simplemente asumirá el estado de la pestaña eliminada. No se llamará a OnInitialized .

He RenderFragment , pero no parece su propiedad de trabajo. El problema es que Blazor Framework seguirá decidiendo cuándo se crea un nuevo componente (llamando así a OnInitialized ) o cuándo se usa una instancia existente.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Si leí esto correctamente, Tab es una clase, no un componente. Debe desacoplar su lista de pestañas del componente que las representa. Su lista de pestañas vive en un servicio, el alcance depende de lo que esté haciendo con ellas. Su componente de pestaña muestra la pestaña actualmente seleccionada en la lista. Si muestra un poco más de su lógica, probablemente pueda mostrarle un ejemplo de trabajo relevante.

over 4 years ago · Santiago Trujillo Report

0

Mira esto

@ref es una referencia a su componente, se agrega a la lista de componentes.

 @implements IDisposable @foreach (var tab in tabs) { <MyTabComponent @ref=@TabRef Tab=@tab /> } @code { List<Tab> tabs = new List<Tab>(); List<MyTabComponent> tabsComp = new List<MyTabComponent>(); MyTabComponent TabRef { set { tabsComp.Add(value); } } public void CreateNewTabAndRemoveOldTab() { tabs.RemoveAt(0); tabs.Add(new Tab()); } public void Dispose() { } }
over 4 years ago · Santiago Trujillo Report

0

MisTabs.razor

 <CascadingValue Value="@this" IsFixed="true"> foreach (var tab in Tabs) { <MyTabComponent/> } </CascadingValue> @code{ private List<MyTabComponent> Tabs; public void Register(MyTabComponent tab) { this.Tabs.Add(tab); } public void UnRegister(MyTabComponent tab) { this.Tabs.Remove(tab); } }

MiTabComponent.razor

 @implements IDisposable <div></div> @code{ [CascadingParameter] protected MyTabs Context { get; set; } protected override void OnInitialized() { Context?.Register(this); // implement your logic here } public void Dispose() { Context?.UnRegister(this); // implement your logic here } }
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!