Cuando creas una signal en Angular, puedes agregar un segundo argumento para especificar un comportamiento personalizado, como definir una función de comparación para determinar si los valores son iguales.
Esto es útil, por ejemplo, para evitar actualizaciones innecesarias si los valores de la signal son complejos o tienen una lógica específica para determinar su igualdad.
💡 Aquí te dejo un ejemplo:
// Función personalizada para comparar dos objetos
const deepEqual = (a: { x: number; y: number }, b: { x: number; y: number }): boolean => {
return a.x === b.x && a.y === b.y;
};
// Crear una signal con una función de comparación personalizada
const position = signal<{ x: number; y: number }>(
{ x: 0, y: 0 }, // Valor inicial
{ equal: deepEqual } // Función de comparación
);
// Cambiar el valor de la signal
position.set({ x: 0, y: 0 }); // No se actualiza, porque deepEqual devuelve true
position.set({ x: 1, y: 1 }); // Se actualiza, porque los valores son diferentes
console.log(position()); // { x: 1, y: 1 }
✨ ¿Por qué usar esta opción?
✅ Evitas actualizaciones innecesarias: Ideal para Signals con datos complejos.
✅ Mayor control: Personalizas cómo y cuándo una signal debe considerarse “igual” o “diferente”.
Este enfoque es perfecto para escenarios donde manejas estructuras de datos como objetos o arrays y no quieres depender solo de la comparación por referencia.
🤔 ¿No lo sabías?
¡Asegúrate de hacer mi nuevo curso de Angular Moderno para que seas un pro en Signals y domines todo lo nuevo de Angular! 💻✨