Migración de Inputs a Signals en Angular: Mejora de Rendimiento y Flujo
Clase 11 de 36 • Curso de Angular Avanzado
Contenido del curso
- 7

Buenas prácticas con variables locales en Angular
09:14 - 8

Optimización de Imágenes en Angular con NG Optimizate Image
17:08 - 9

Optimización de Rutas Amigables para SEO en Angular
11:27 - 10

"Reactividad en Angular: Migración a Input Signals"
20:42 - 11

Migración de Inputs a Signals en Angular: Mejora de Rendimiento y Flujo
12:24 - 12

Migración de Outputs en Angular: De Decoradores a Funciones
07:35 - 13

Primitivas reactivas de Angular: Uso de Linked Signal y Computed
12:56 - 14

Sincronización de Componentes en Angular con Model y Signals
12:03 - 15

Interoperabilidad de RXJS y Signals en Angular
11:18 - 16

Conversión de Observables a Signals en Angular con toSignal
08:07 - 17

Interoperabilidad de RXDS y Signals en Angular: Uso de RX Resourcers
11:10 - 18

Manejo de Parámetros Reactivos con RX Resource en Angular
09:18 - 19

Manejo de Promesas y Fetch en Angular sin RXJS
07:59 - 20

Reactividad en Angular: Uso de Signals para Consultas DOM
09:00 - 21

Configuración de Prettier para HTML en Angular
05:28 quiz de Nuevas Funcionalidades en Angular
- 22

Server Side Rendering en Angular: Builders y Migración
10:17 - 23

Server Side Rendering con Angular: Mejora Rendimiento y SEO
13:26 - 24

Manejo de APIs del Navegador con Angular: Uso de AfterNextRender
09:43 - 25

Geolocalización y APIs: Creando un Mapa de Tiendas Cercanas
15:39 - 26

Habilitar Pre-rendering en Angular para Generación de Sitios Estáticos
11:26 - 27

Despliegue de Aplicaciones Node.js con App Fiber Hosting
18:12 quiz de Server-Side Rendering (SSR) y Navegación
- 28

Generación de Meta Tags Dinámicos con Angular y Open Graph
15:11 - 29

Creación de MetaTags Dinámicos en Angular
12:51 - 30

Proceso de Hydration y Event Replay en Angular
05:54 - 31

Implementación de Productos Relacionados en Angular eCommerce
09:26 - 32

Carga diferida de componentes en Angular para mejorar rendimiento
10:10 - 33

Optimización de Incremental Hydration en Angular
06:14 - 34

Configuración de Server Routing en Angular
10:43 - 35

Aplicaciones Sin Zone.js: Migración a Signals en Angular
13:02 - 36

Despliegue y Reactividad Avanzada en Angular
00:53
La reactividad en Angular ha evolucionado significativamente con la introducción de los signals, ofreciendo un rendimiento mejorado y una reactividad más granular. Esta nueva forma de manejar los inputs no solo optimiza el tiempo de ejecución de nuestras aplicaciones, sino que también proporciona una experiencia de desarrollo más intuitiva. Veamos cómo podemos migrar nuestros proyectos existentes a este nuevo modelo de reactividad y aprovechar todas sus ventajas.
¿Cómo migrar automáticamente a Signal Inputs en Angular?
Cuando tienes una base de código extensa, revisar y modificar manualmente cada input puede resultar tedioso. Afortunadamente, Angular ofrece una solución automatizada para esta migración. Mediante un simple comando, puedes convertir todos los inputs tradicionales en signal inputs sin tener que modificar cada componente individualmente.
Para realizar esta migración, ejecuta el siguiente comando en tu terminal:
ng generate @angular/core:signal-input-migration
Al ejecutar este comando, Angular analizará tu código y transformará automáticamente los decoradores @Input() en signal inputs. Durante el proceso, te preguntará si deseas migrar lo máximo posible, incluso si esto pudiera romper temporalmente la compilación. En muchos casos, es seguro aceptar esta opción.
¿Qué cambios realiza la migración?
La migración transforma código como este:
@Input() name: string | undefined;
getNameLength(): number {
return this.name ? this.name.length : -1;
}
En algo similar a esto:
@Input({required: true}) name = input<string>();
getNameLength(): number {
const name = this.name();
return name ? name.length : -1;
}
Los principales cambios incluyen:
- Conversión de propiedades
@Input()en funciones signal - Ajuste de las referencias a estos inputs en los métodos de la clase
- Modificación de las referencias en las plantillas HTML
¿Cómo realizar una migración progresiva?
Una característica valiosa de esta herramienta de migración es la posibilidad de aplicarla de forma selectiva. Si no estás seguro de migrar toda tu aplicación de una vez, puedes especificar rutas o carpetas específicas:
ng generate @angular/core:signal-input-migration ./src/app/products
Esto permite una migración gradual, donde puedes probar los cambios en un módulo antes de aplicarlos a toda la aplicación. Esta aproximación reduce el riesgo y te permite verificar que todo funcione correctamente antes de continuar con el resto del código.
Verificación post-migración
Después de ejecutar la migración, es crucial verificar que tu aplicación siga funcionando correctamente. Comprueba:
- La navegación entre páginas
- La funcionalidad de componentes clave
- Las interacciones con formularios
- El renderizado correcto de datos
¿Cómo mejorar la legibilidad del código con signals?
Una práctica que algunos equipos de desarrollo adoptan es utilizar una convención de nomenclatura para distinguir fácilmente los signals de otras propiedades o métodos. Una convención popular es añadir el prefijo $ a las variables que son signals:
@Input() $message = input<string>();
someMethod() {
const message = this.$message();
// Resto del código
}
Esta convención hace que el código sea más legible, ya que permite identificar rápidamente qué variables son signals y requieren ser ejecutadas como funciones para obtener su valor.
Uso de alias para mantener la API pública
Si decides adoptar esta convención pero no quieres cambiar la forma en que otros componentes interactúan con el tuyo, puedes utilizar alias en los inputs:
@Input({alias: 'duration'}) $duration = input<number>();
Esto permite que los componentes padres sigan utilizando el nombre original (duration) mientras internamente trabajas con la convención ($duration).
Es importante mencionar que el uso de alias está considerado una mala práctica según algunas reglas de linting, ya que puede crear confusión. Sin embargo, en este caso específico, puede ser justificable para mejorar la legibilidad del código. Si decides seguir este enfoque, puedes desactivar la regla correspondiente en tu configuración de ESLint:
"@angular-eslint/no-input-rename": "off"
La decisión de adoptar esta convención debe ser consensuada por el equipo, evaluando si los beneficios en términos de legibilidad superan las desventajas de romper una regla de estilo.
La migración a signal inputs representa un paso importante hacia aplicaciones Angular más eficientes y mantenibles. Con las herramientas automatizadas que proporciona el framework, este proceso se vuelve accesible incluso para proyectos grandes y complejos. ¿Has probado ya esta migración en tus proyectos? Comparte tu experiencia en los comentarios.