¿Cuándo te basta con `signals` y cuándo pasarías a ComponentStore o NgRx?
¿Cuándo te basta con `signals` y cuándo pasarías a ComponentStore o NgRx? en Angular: criterios sobre gestión de estado y signals, errores comunes y respuest...
Esta pregunta de Angular sobre "Cuándo te basta con signals y cuándo pasarías a ComponentStore o NgRx" deja ver rápido si conviertes gestión de estado en decisiones operativas o si te quedas en teoría.
En una entrevista fuerte gana peso la persona que habla de costes, señales de degradación, deuda aceptada y plan de validación para "Cuándo te basta con signals y cuándo pasarías a ComponentStore o NgRx", no solo de API o sintaxis.
Qué evalúa el entrevistador
- Si distingues qué parte de "Cuándo te basta con
signalsy cuándo pasarías a ComponentStore o NgRx" pertenece a gestión de estado y cuál debería resolverse en signals. - Si conviertes la respuesta en criterios observables: límites claros, impacto en el mantenimiento y forma de detectar regresiones.
- Si identificas la fuente de verdad, el estado derivado y los puntos donde podría aparecer sincronización manual o duplicada.
Respuesta sólida
- Nombra primero la fuente de verdad y deja claro qué datos deberían derivarse en vez de almacenarse dos veces.
- Explica dónde viviría cada pieza de estado: local si solo afecta a una interacción, compartido si cruza componentes y remoto si depende del servidor.
- Añade cómo evitarías sincronizaciones manuales, renders accidentales y errores por datos obsoletos.
Compromisos y errores comunes
- Duplicar estado entre store, formularios, URL o caché acaba generando inconsistencias que son difíciles de reproducir.
- Mover demasiado pronto una preocupación al estado global hace visible el problema, pero no lo arregla.
Ejemplo de código
Un ejemplo pequeño ayuda a ver dónde colocarías la lógica de gestión de estado en "Cuándo te basta con signals y cuándo pasarías a ComponentStore o NgRx" y qué parte dejarías derivada o encapsulada.
import { ChangeDetectionStrategy, Component, computed, signal } from '@angular/core';
@Component({
selector: 'app-product-filter',
standalone: true,
changeDetection: ChangeDetectionStrategy.OnPush,
template: `
<input [value]="query()" (input)="query.set(($any($event.target)).value)" />
<ul>
@for (product of filteredProducts(); track product.id) {
<li>{{ product.name }}</li>
}
</ul>
`,
})
export class ProductFilterComponent {
readonly query = signal('');
readonly products = signal([{ id: 1, name: 'Angular' }, { id: 2, name: 'RxJS' }]);
readonly filteredProducts = computed(() =>
this.products().filter((product) =>
product.name.toLowerCase().includes(this.query().trim().toLowerCase()),
),
);
}
Lo importante no es la API concreta, sino que la solución hace visible la fuente de verdad, el tratamiento del error y el punto exacto donde gestión de estado se sincroniza con signals dentro de "Cuándo te basta con signals y cuándo pasarías a ComponentStore o NgRx" en Angular.
Ejemplo o caso real
Yo lo bajaría a un escenario reconocible de Angular: una pieza donde "Cuándo te basta con signals y cuándo pasarías a ComponentStore o NgRx" aparece de forma recurrente, ya ha dejado señales en revisión o en soporte y mezcla gestión de estado con signals. Si la decisión mejora claridad, observabilidad y velocidad de cambio en ese trozo, entonces merece escalarla; si no, la dejaría local y documentada.
Frase corta de entrevista
Prefiero una solución comprobable y reversible a una respuesta brillante que nadie sepa mantener dentro de seis meses.
Marcarla como leída actualiza tu progreso.