Sobre el proyecto

Reselect es una biblioteca para crear funciones "selectoras" memoizadas. Se usa comúnmente con Redux, pero también puede usarse con cualquier dato inmutable de JavaScript. Características clave descritas en el README: - Los selectores pueden calcular datos derivados, lo que permite que Redux almacene el estado mínimo posible. - Los selectores son eficientes: un selector no se recalcula a menos que uno de sus argumentos cambie. - Los selectores son componibles: pueden usarse como entrada de otros selectores. El proyecto señala la página de documentación de Redux sobre derivación de datos con selectores para conocer el propósito, la motivación y los patrones de uso típicos, incluido el uso con React-Redux. Opciones de instalación: - Redux Toolkit: Reselect ya está incluido por defecto en el paquete oficial de Redux Toolkit, por lo que no se necesita instalación adicional. Se puede importar como `createSelector` desde `@reduxjs/toolkit`. - Independiente: instale el paquete `reselect` mediante npm, Yarn o pnpm. La documentación está alojada en reselect.js.org e incluye una introducción, una explicación de cómo funciona Reselect, referencias de API para `createSelector`, `createSelectorCreator`, `createStructuredSelector`, comprobaciones solo de desarrollo, `lruMemoize` y `weakMapMemoize`, además de una sección de preguntas frecuentes. Uso básico: `createSelector` acepta uno o más selectores de entrada que extraen valores de los argumentos, y una función de resultado que recibe los valores extraídos y devuelve un valor derivado. El selector de salida generado solo se recalcula cuando los valores extraídos cambian. El README incluye un ejemplo que muestra que un selector normal se ejecuta en cada llamada, mientras que un selector memoizado omite el recálculo y devuelve la referencia de resultado existente cuando las entradas no cambian. Esta estabilidad de referencia se señala como importante para bibliotecas como React-Redux y React que dependen de comprobaciones de igualdad de referencia para optimizar las actualizaciones de la interfaz de usuario. El README define terminología: función selectora, selectores de entrada, selector de salida, función de resultado y dependencias. Los cambios descritos en la versión 5.0.0 incluyen: - Personalización: objeto de opciones para `createSelectorCreator` con funciones `memoize` y `argsMemoize` personalizadas y sus opciones; `createSelector` admite la personalización directa de `memoize` y `argsMemoize`. - Memoización: nueva función de memoización predeterminada `weakMapMemoize`; `memoize` y `argsMemoize` expuestos en los campos del selector de salida para depuración. - TypeScript: se interrumpe el soporte para versiones de TypeScript inferiores a 4.7; se mejora el rendimiento de TypeScript para anidar selectores de salida, con el límite de anidamiento aumentado de aproximadamente 8 a alrededor de 30, reduciendo errores de instanciación de tipos profundos. - API: se eliminó la segunda sobrecarga de `createStructuredSelector` por ser propensa a errores en tiempo de ejecución. - Características adicionales: `dependencyRecomputations` y `resetDependencyRecomputations` en los campos del selector de salida; herramienta de desarrollo `inputStabilityCheck` que ejecuta los selectores de entrada dos veces con los mismos argumentos y advierte si los resultados difieren; herramienta de desarrollo `identityFunctionCheck` que verifica si la función de resultado devuelve su propia entrada. - Cambios de ruptura: se eliminaron los tipos `ParametricSelector` y `OutputParametricSelector`, con su funcionalidad integrada en `Selector` y `OutputSelector`. El proyecto está licenciado bajo MIT. Originalmente se inspiró en los getters de NuclearJS, las suscripciones de re-frame y una propuesta de Redux.