Input Signals en #Angular 17.1 - ¿Cómo usarlos?

Carlos Morales
21 Feb 202410:19

Summary

TLDREste video explica las nuevas características de los input signals introducidos en Angular 17.1, que prometen cambiar la forma de programar reactivamente. Se destaca cómo solucionar problemas con los decoradores @Input anteriores y se muestra cómo utilizar los input signals, aprovechando sus beneficios como la reactividad automática, los alias, las transformaciones de datos y la compatibilidad con la configuración anterior. Además, se menciona que los ciclos de vida podrían ser reemplazados por el effect para el manejo de cambios en los signals. En resumen, es una completa guía sobre esta nueva funcionalidad que optimizará el desarrollo en Angular.

Takeaways

  • 📍 Angular 17.1 introduce los 'input signals', un nuevo enfoque para manejar las propiedades de entrada en los componentes de forma reactiva.
  • 😐 Los decoradores @Input tradicionales tienen limitaciones y no son completamente reactivos, lo que puede causar problemas.
  • 😃 Los 'input signals' convierten las propiedades de entrada en señales reactivas, lo que facilita el manejo de cambios y mejora el rendimiento.
  • 🆕 Para utilizar 'input signals', se importa 'input' desde '@angular/core' y se declara la propiedad como un InputSignal con una configuración opcional.
  • 🚫 Con 'input signals', ya no es necesario utilizar los decoradores @Input para las propiedades de entrada.
  • ✨ Los 'input signals' permiten una configuración adicional, como establecer aliases, validaciones, transformaciones y más.
  • 🔄 El método 'ngOnChanges' sigue funcionando con los 'input signals', pero se espera que sea reemplazado por 'effect' en el futuro.
  • ⚠️ Los 'input signals' aún están en developer preview y no se recomiendan para producción por el momento.
  • 🥇 Se mencionó un sorteo de un curso para los suscriptores del canal, que se realizará mediante los comentarios en este video.
  • 📢 Se alienta a los espectadores a compartir, dar like y comentar el video para participar en el sorteo del curso.

Q & A

  • ¿Qué son los input signals en Angular 17?

    -Los input signals son una nueva funcionalidad introducida en Angular 17.1 que permite tratar los inputs como señales reactivas, facilitando la programación reactiva y eliminando la necesidad de utilizar decoradores @Input.

  • ¿Cuál era el problema con los decoradores @Input antes de Angular 17.1?

    -Antes de Angular 17.1, los inputs decorados con @Input no eran reactivos por sí mismos, lo que dificultaba la actualización automática de las propiedades dependientes cuando el input cambiaba.

  • ¿Cómo se define un input signal en Angular 17.1?

    -Para definir un input signal, se utiliza la sintaxis `@Input() nombrePropiedad = inputSignal(valorInicial)`, importando `inputSignal` desde `@angular/core`.

  • ¿Qué ventajas ofrecen los input signals en comparación con los decoradores @Input?

    -Los input signals ofrecen una programación reactiva más sencilla, ya que se actualizan automáticamente cuando su valor cambia, sin necesidad de implementar lógica adicional. Además, son más compatibles con la programación funcional y pueden simplificar el código.

  • ¿Se pueden configurar los input signals de alguna manera?

    -Sí, los input signals permiten configurar opciones como `required` para hacerlos obligatorios, `alias` para cambiar su nombre y `transform` para transformar su valor antes de asignarlo.

  • ¿Qué alternativas existían antes de los input signals para manejar inputs reactivos?

    -Antes de los input signals, era necesario envolver los inputs en señales manuales, utilizando patrones como `inputSignal$ = signal(initialValue)` o `@Input() set inputProperty(value: number) { this.inputSignal.set(value); }`.

  • ¿Qué impacto tendrán los input signals en el ciclo de vida de los componentes de Angular?

    -Se espera que los input signals reduzcan la necesidad de utilizar los ciclos de vida tradicionales de Angular, como ngOnChanges, ya que las propiedades dependientes se actualizarán automáticamente cuando los inputs cambien.

  • ¿Se pueden combinar input signals y decoradores @Input en un mismo componente?

    -Sí, es posible utilizar input signals y decoradores @Input en un mismo componente, aunque se espera que los input signals reemplacen gradualmente a los decoradores @Input.

  • ¿Qué otras características relacionadas con la programación reactiva se esperan en futuras versiones de Angular?

    -Se menciona que Angular parece estar enfocándose más en la programación funcional, por lo que se esperan más características relacionadas con efectos y la gestión de señales en futuras versiones.

  • ¿Qué consejo se da sobre el uso de input signals en producción?

    -Se advierte que, aunque los input signals están disponibles en Angular 17.1, todavía se encuentran en fase de "developer preview", por lo que no se recomienda su uso en producción por el momento, sino más bien para experimentar y familiarizarse con la nueva funcionalidad.

Outlines

00:00

🔍 Angular 17 y la Reactividad con Input Signals

Este segmento introduce Angular 17.1 y su nueva funcionalidad de 'input signals' que promete cambiar la forma de programar reactivamente, solucionando problemas con el manejo de inputs reactivos. Se presenta un problema común con los inputs y se explica cómo antes de Angular 17.1 se solucionaba mediante el uso de setters y el patrón ngOnChanges. Luego, se muestra cómo Angular 17.1 simplifica este proceso al introducir 'input signals', permitiendo que los inputs sean reactivos y actualicen la UI automáticamente sin necesidad de métodos adicionales. Se destaca la importancia de esta actualización para hacer el desarrollo más intuitivo y eficiente.

05:02

🛠 Mejoras y Flexibilidad en Angular 17 con Input Signals

Este párrafo profundiza en las capacidades avanzadas de los 'input signals' en Angular 17, destacando su compatibilidad y flexibilidad mejoradas. Se explica cómo se pueden hacer inputs requeridos, cambiar aliases y realizar transformaciones de datos de manera sencilla, lo que refleja un enfoque más funcional de Angular. Además, se menciona la compatibilidad con ciclos de vida existentes y se anticipa un cambio hacia un enfoque basado en signals. Finalmente, se promueve la participación de la comunidad a través de un sorteo, incentivando la interacción y el feedback sobre estas nuevas características.

10:03

🎁 Invitación a Participar y Aprender con Angular

El último segmento se enfoca en la invitación a la audiencia para participar en un sorteo de un curso, como agradecimiento por el apoyo al canal y para fomentar el aprendizaje continuo. Se hace énfasis en la importancia de aprovechar las nuevas funcionalidades de Angular para mejorar las habilidades de desarrollo y se anima a la comunidad a participar activamente en la discusión y el intercambio de conocimientos.

Mindmap

Keywords

💡Input Signals

Los Input Signals son una nueva característica introducida en Angular 17.1 que reemplazan la forma tradicional de manejar las propiedades de entrada (inputs) en los componentes. Según el video, los Input Signals simplifican el proceso de hacer que los valores de entrada sean reactivos, es decir, que se actualicen automáticamente cuando cambien. En lugar de usar decoradores como `@Input()`, se utiliza la sintaxis `input Signals` para definir los valores de entrada. Esto promete un cambio en la forma de programar de manera reactiva en Angular.

💡Señales computadas

Las señales computadas, también conocidas como `computed signals`, son una forma de derivar nuevos valores a partir de otros valores reactivos existentes. En el video, se muestra un ejemplo donde se utiliza la función `computed()` para cortar un nombre basado en el valor del `input Counter`. Cuando el `Counter` cambia, el `computed signal` se actualiza automáticamente para reflejar el nuevo valor truncado del nombre. Esto permite crear lógica reactiva compleja de una manera más declarativa y fácil de mantener.

💡Reactivo

El término 'reactivo' se refiere a la capacidad de un sistema o componente para responder automáticamente a los cambios en los datos o entradas. En el contexto del video, se menciona que antes de Angular 17.1, los `inputs` no eran reactivos de forma nativa, lo que requería el uso de técnicas adicionales para lograr la reactividad. Con la introducción de los Input Signals, Angular busca hacer que la programación reactiva sea más fácil y más integrada en el framework.

💡Decoradores

Los decoradores son una sintaxis especial en Angular (y TypeScript) que se utiliza para anotar o agregar metadatos a clases, propiedades, métodos, etc. En el video, se menciona que con la llegada de los Input Signals, es posible que los decoradores ya no sean necesarios para definir los valores de entrada (`@Input()`). Esto sugiere que Angular está explorando un enfoque más funcional y declarativo en lugar de depender en gran medida de los decoradores.

💡Requerido

La propiedad 'requerido' (o 'required' en inglés) se refiere a la capacidad de marcar un Input Signal como obligatorio, lo que significa que debe ser proporcionado por el componente padre. En el video, se muestra cómo se puede aplicar la propiedad 'required' a un Input Signal utilizando la sintaxis `input.required`. Esto evita la necesidad de inicializar el valor en el componente hijo y garantiza que siempre se reciba un valor del componente padre.

💡Alias

Un alias es un nombre alternativo que se puede asignar a un Input Signal. En el video, se demuestra cómo se puede cambiar el nombre del Input Signal 'Counter' a 'bwe' utilizando la propiedad 'alias' en la configuración del Input Signal. Esto puede ser útil para evitar conflictos de nombres o para hacer que los nombres sean más descriptivos y significativos en diferentes contextos.

💡Transform

La propiedad 'transform' en un Input Signal permite transformar el valor recibido antes de asignarlo a la propiedad correspondiente. En el ejemplo del video, se muestra cómo se puede multiplicar el valor del `Counter` por 2 antes de asignarlo a la propiedad utilizando una función de transformación. Esto proporciona una forma flexible de manipular los datos de entrada antes de que se utilicen en el componente.

💡Inferencia de tipos

La inferencia de tipos es una característica de TypeScript que permite deducir automáticamente el tipo de una variable o expresión basándose en su valor o contexto. En el video, se menciona que al utilizar la propiedad 'transform' en un Input Signal, Angular puede inferir el tipo de retorno de la función de transformación y no es necesario especificarlo explícitamente. Esto simplifica el código y aprovecha las capacidades de TypeScript para una mejor experiencia de desarrollo.

💡LifeCycle Hooks

Los LifeCycle Hooks (o ganchos de ciclo de vida) son métodos especiales en Angular que se ejecutan en diferentes etapas del ciclo de vida de un componente, como la creación, la actualización o la destrucción. En el video, se menciona que con la llegada de los componentes basados en señales, es posible que los LifeCycle Hooks actuales dejen de ser utilizados y sean reemplazados por otros enfoques, como el uso del `effect` para depurar y observar los cambios en las señales.

💡Effect

El 'effect' es un concepto que se menciona en el video como una posible alternativa futura a los LifeCycle Hooks actuales en Angular. Si bien no se proporciona una explicación detallada, se sugiere que el 'effect' podría ser una forma de observar y reaccionar a los cambios en las señales (signals) dentro de los componentes basados en señales. Esto probablemente esté relacionado con un enfoque más funcional y declarativo para el manejo del estado y la reactividad en Angular.

Highlights

Angular 17.1 introduce los input signals, que cambiarán la forma de programar reactivamente.

Los input signals reemplazan la necesidad de usar decoradores @Input para hacer las propiedades reactivas.

Con input signals, se puede convertir una propiedad en reactiva usando `input: InputSignal` de `@angular/core`.

Los input signals soportan la propiedad `required` para hacer la propiedad obligatoria.

Se puede cambiar el alias de la propiedad con la opción `alias` en la configuración del input signal.

La opción `transform` permite transformar el valor del input signal antes de asignarlo.

Los input signals son compatibles con la API de inputs anterior, por lo que se pueden seguir utilizando mientras están en developer preview.

El uso de `ngOnChanges` para detectar cambios en inputs signals funcionará de momento, pero eventualmente se utilizará `effect` en su lugar.

Se mencionó un sorteo de un curso para los suscriptores del canal al llegar a 1000, pero no se pudo hacer por limitaciones técnicas.

Como alternativa, se hará el sorteo del curso entre los comentarios de este video.

Transcripts

play00:00

Hola y bienvenidos de nuevo a este canal

play00:01

hoy vamos a estar viendo algo nuevo que

play00:03

nos está trayendo angular 17 exactamente

play00:06

a partir de la versión

play00:08

17.1 estamos hablando de los input

play00:11

signals que posiblemente van a cambiar

play00:13

muchas cosas Al momento de programar

play00:15

reactivamente primero vamos a ver un

play00:18

posible problema con los decoradores

play00:19

inputs Y cómo es que en ciertas formas

play00:21

no nos beneficia esta

play00:23

implementación aquí como podemos ver

play00:25

tenemos una aplicación muy básica en la

play00:28

cual está compuesta por un comp ente que

play00:30

recibe un número o un Counter en este

play00:32

caso que es el input y en base a este

play00:34

número y lo que ingresemos en esta caja

play00:37

de texto en este input va a cortar el

play00:39

nombre de la persona en la eh posición

play00:42

digamos que le vamos a pasar por el

play00:44

counter No si pueden ver aquí ya tenemos

play00:47

este eh comper Signal que lo que se está

play00:50

encargando es cada vez que haya valor en

play00:52

el query va a ser un slce comenzando en

play00:55

cero y terminando en el counter que es

play00:57

el input que está recibiendo ahora en el

play01:00

input pues tenemos esta este método para

play01:03

cambiar el valor del query no a través

play01:05

de lo que vamos ingresando en el input

play01:08

html que tenemos aquí no y muy bien

play01:11

básicamente Pues estamos pasando el

play01:14

input desde un componente padre y

play01:16

podemos actualizarlo con este botón

play01:18

vamos a ver cómo funciona si yo pongo mi

play01:21

nombre completo Carlos Morales vamos a

play01:24

ver que va a comenzar a contar 0 1 do

play01:27

Perdón 1 2 3 4 y 5 y ahí lo va a dejar

play01:31

ya no va a permitir que siga eh digamos

play01:34

mostrando el valor restante no Por qué

play01:36

Porque lo está cortando cuando llegue a

play01:38

5co muy bien pero si ahora yo actualizo

play01:41

el counter como pueden ver aquí Se está

play01:44

actualizando Y es más si yo hago acá un

play01:46

engine changes va obviamente va a ver se

play01:49

va a ver que pues su valor está

play01:50

aumentando está cambiando pero como

play01:52

pueden ver la propiedad shorted name el

play01:56

Signal computed no está cambiando esto

play01:59

es porque los input no son reactivos

play02:00

Obviamente si fuera un Signal Pues sí Y

play02:03

esta es justamente la forma que vamos a

play02:04

usar nosotros para arreglarlo esto se

play02:07

hacía me antes de esta versión 17.1 no

play02:11

cómo lo podemos arreglar Bueno podemos

play02:13

usar hacer dos eh hacer dos formas para

play02:15

convertir digamos este Counter en un

play02:17

Signal la primera podría ser un el enon

play02:20

changes o lo más habitual el patrón más

play02:22

habitual que generalmente se usa es

play02:24

Poner este input como si fuera un set y

play02:26

Dentro de este set agregar un s fin

play02:30

vamos a hacerlo para esto vamos a

play02:32

convertir este Counter en un setter va a

play02:35

recibir aquí un valor le vamos a decir

play02:38

que es numérico y Aquí vamos a crear un

play02:41

Signal vamos a decirle Signal Ah y

play02:45

cuando el input counter se actualice o

play02:48

Recibe un nuevo valor va a setear en el

play02:52

value ese valor muy bien y ahora vamos

play02:56

aquí al Counter y le vamos a cambiar por

play02:59

el Signal que hemos creado como pueden

play03:02

ver ahora si yo pongo mi

play03:05

nombre pueden ver que sigue funcionando

play03:08

igual porque el valor el value es Signal

play03:11

es cco si nosotros lo actualizamos vamos

play03:14

a ver que pues esto comienza a funcionar

play03:17

ya de la manera que estamos esperando no

play03:19

El Counter o el valor es número es 13 y

play03:22

comienza a cortar a partir del C y el 13

play03:24

y como pueden ver pues está funcionando

play03:26

Por qué Porque ahora pues esto sí ya es

play03:28

totalmente reactivo

play03:30

esto era antes de la versión 17.1 pero a

play03:33

partir de la versión 17.1 como pueden

play03:36

ver aquí en el package Jason angular ha

play03:39

introducido lo que son los input signals

play03:42

Cómo cambia Esto bueno vamos a comentar

play03:44

brevemente por aquí esto de acá para que

play03:46

no lo

play03:47

perdamos y lo único que tendríamos que

play03:49

hacer sería poner

play03:52

Counter y le vamos a decir que va a ser

play03:57

igual a input

play04:00

Okay ahora me está diciendo aquí que no

play04:02

encuentra input De dónde viene este

play04:04

input bueno viene de el mismo Core des

play04:06

angular Core y con esto solamente con

play04:08

esto vamos a quitarle por momento esto

play04:10

de acá solamente con esto ya le

play04:13

estaríamos diciendo que Counter es un

play04:16

input Signal no bueno es de tipo un n

play04:19

porque pues no sabe qué es y tampoco

play04:21

tiene un valor no pero vamos a decirle

play04:24

que es de tipo numérico y pues en este

play04:26

caso vamos eh a inicializar con cero no

play04:29

ahora acá Se está quejando porque dice

play04:30

sabes que no no no encuentro este

play04:32

Counter obviamente porque lo hemos he

play04:34

quitado no Y ahorita si yo guardo pues

play04:36

como pueden ver ya está funcionando de

play04:38

nuevo ahora voy a agregar de nuevo mi

play04:41

nombre y vamos a actualizar este Counter

play04:44

y como pueden ver ya está funcionando

play04:47

Por qué Porque este Counter ahora es un

play04:49

Signal no y es algo muy interesante que

play04:52

Como he mencionado eh va a cambiar mucho

play04:54

la forma en la cual vamos a estar

play04:56

programando ahora con angular es más ya

play04:58

no vamos a hacer uso de nuestro

play04:59

decoradores @input y quién sabe si más

play05:01

adelante vamos a seguir usando eh para

play05:04

otras cosas también los decoradores

play05:06

parece que un poco se enf está enfocando

play05:08

en ser más funcional angular Pero bueno

play05:10

todavía no se sabe el destino que va a

play05:12

est tomando pero lo interesante de esto

play05:14

es de que eh trae muchas eh Mejor dicho

play05:17

es muy compatible con todas las cosas

play05:19

que anteriormente se podían hacer con

play05:20

los input que haí si por ejemplo

play05:22

nosotros necesitamos eh tener este

play05:24

required Bueno lo que podemos hacer aquí

play05:28

después del input es poner un punto y

play05:30

como pueden ver acá Hay ciertos métodos

play05:33

pero también trae el método required de

play05:35

esta forma en de esta forma pues ya nos

play05:38

aseguramos de que sea requerido y acá Se

play05:41

está quejando nos está diciendo sabes

play05:42

queé Oye tienes un error Por qué Porque

play05:44

básicamente si nosotros decimos que es

play05:46

requerido ya no necesitamos inicializar

play05:48

porque sabemos que sí o sí tienen que

play05:50

enviarlo desde el componente padre No

play05:52

desde esta parte de acá Así que ahora

play05:54

tenemos nuestro input input de forma

play05:56

requerida no muy bien pero qué pasa si

play05:58

nosotros ne neces estamos de repente

play06:00

cambiarle eh el alias bueno para esto

play06:03

también puede recibir un objeto de

play06:05

configuración en el cual si nosotros

play06:07

vemos vamos a ver que puede recibir el

play06:09

alias vamos a cambiárselo a bwe por

play06:12

ejemplo y en este caso nos diría Oye ya

play06:15

no existe el counter ahora existe el

play06:17

valve como pueden ver todo sigue

play06:19

funcionando porque lo hemos renombrado y

play06:22

también aquí acepa eh la propiedad

play06:24

transform que nos va a permitir

play06:26

transformar nuestro valor de repente

play06:28

nosotros necesitamos enviar este Counter

play06:30

pero por x motivo que queremos

play06:32

multiplicarlo por dos Entonces vamos a

play06:35

recibir una función en el cual va a

play06:37

recibir el valor eso lo podríamos hacer

play06:40

dentro de nuestro componente o aparte no

play06:42

y vamos a decirle sabes qué vamos a

play06:44

retornar value por por dos no y de esta

play06:50

forma pues ya tendríamos alterado Por

play06:53

así decirlo nuestro eh input No aquí y

play06:58

me está dando este error porque bueno

play07:00

básicamente voy a formatear aquí para

play07:02

que se vea un poquito mejor nos está

play07:04

diciendo que el tipo Eh bueno esta

play07:06

función no es asignable undefine it Y

play07:08

esto es porque cuando nosotros agregamos

play07:10

ese transform tranquilamente esto podría

play07:13

ser eh Mejor dicho el valor como va a

play07:15

cambiar podría ser otro tipo de dato por

play07:17

ejemplo aquí nosotros podríamos poner

play07:19

que sea que devuelva un String pero lo

play07:21

que necesitamos de hacer es decirle

play07:23

sabes que también es tipo numérico no

play07:25

entonces agregando eso también ya

play07:27

funcionaría no Y como pueden ver aquí si

play07:29

yo pongo mi nombre voy a ponerlo

play07:32

completo porque se supone que ahora

play07:33

debería multiplicarlo por 10 para que lo

play07:35

corte y bueno como pueden ver no eh 5

play07:39

por eh por 2 10 no en este caso pues

play07:41

está funcionando acá si yo lo actualizo

play07:43

pues va incrementando No ahora sería 12

play07:46

Entonces eh pero también aquí nosotros

play07:48

podríamos omitir esto y automáticamente

play07:51

esto lo infiere no y ya sabe que pues va

play07:54

a recibir un un número y también va a

play07:57

devolver un número no entonces esto es

play07:59

muy interesante de todas formas el el

play08:02

Api con los input que teníamos

play08:04

anteriormente si ustedes están

play08:05

utilizándolo no se preocupen porque van

play08:07

a poder seguir utilizando eh ojo que

play08:09

todavía sigue en developer preview Así

play08:11

que con mucho cuidado todavía no es

play08:12

recomendable que lo hagan para

play08:14

producción lo pueden s usar para

play08:16

experimentar algo más que quería

play08:18

mencionar antes de que acabe este video

play08:20

es que pues si bien cierto nosotros

play08:23

tenemos el engine change para poder eh

play08:26

ver cuando está cambiando nuestros

play08:29

inputs también funciona con este en este

play08:34

caso eh lo que vendría a ser los input

play08:36

signals pero A mi parecer eso va a ser

play08:38

por el momento Ah acá sería Counter

play08:41

perdón porque teóricamente cuando vengan

play08:44

los

play08:44

eh componentes basados en signals van a

play08:48

dejar de ser utilizados estos eh ciclos

play08:51

de vida que tiene angular no y van a

play08:53

estar más enfocados en por ejemplo el e

play08:56

no que es para ir debug Por así decirlo

play08:58

cada vez vez que cambia alguno de

play09:00

nuestros signals como pueden ver acá

play09:03

Esto está viniendo en la línea 34 Perdón

play09:05

acá desde nuestro engine changes no pero

play09:08

eh seguro más adelante vamos a estar

play09:11

usando lo que vendría a ser el effect

play09:13

para poder ir eh viendo Cuáles es los

play09:16

Cuáles son los cambios que tienen

play09:17

nuestros singles así que bueno Espero

play09:19

que les haya gustado este video si

play09:21

tienen alguna duda pues espero que lo

play09:23

dejen también y antes que me olvide yo

play09:26

había prometido de que iba a regalar un

play09:28

curso si se suscribían a mi canal para

play09:30

llegar a los 1000 suscriptores eh era la

play09:32

primera vez que lo hacía eh Y bueno no

play09:35

sabía que no se podía bueno no encontré

play09:37

ninguna herramienta para poder obtener

play09:39

todos los digamos suscriptores y poder

play09:42

hacer el regalo Así que voy a igual lo

play09:45

voy a dejar en en las redes que sobre

play09:48

este video todas las personas que

play09:50

Comenten voy a hacer un el sorteo en

play09:53

base a estos comentarios porque sí hay

play09:54

muchas herramientas para hacerlo en base

play09:56

a los comentarios de un video así que

play09:58

por favor compartan este video para que

play10:00

llegue a más personas denle like y

play10:02

también pues Comenten para que puedan

play10:04

ganar este curso Que obviamente vamos a

play10:06

conversarlo con la persona que lo gane

play10:08

para poder dárselo y que le saque todo

play10:10

el provecho necesario así que sin más me

play10:12

despido y espero que estén muy

play10:17

bien

Rate This

5.0 / 5 (0 votes)

Do you need a summary in English?