À propos du projet

Reselect est une bibliothèque pour créer des fonctions « sélecteur » mémoïsées. Elle est couramment utilisée avec Redux, mais peut également être utilisée avec toute donnée JavaScript immuable. Caractéristiques clés décrites dans le README : - Les sélecteurs peuvent calculer des données dérivées, permettant à Redux de stocker l'état minimal possible. - Les sélecteurs sont efficaces : un sélecteur n'est pas recalculé à moins que l'un de ses arguments ne change. - Les sélecteurs sont composables : ils peuvent être utilisés comme entrée d'autres sélecteurs. Le projet renvoie à la page de documentation Redux sur la dérivation de données avec les sélecteurs pour le contexte, la motivation et les modèles d'utilisation typiques, y compris l'utilisation avec React-Redux. Options d'installation : - Redux Toolkit : Reselect est déjà inclus par défaut dans le package officiel Redux Toolkit, aucune installation supplémentaire n'est donc nécessaire. Il peut être importé comme `createSelector` depuis `@reduxjs/toolkit`. - Autonome : installez le package `reselect` via npm, Yarn ou pnpm. La documentation est hébergée sur reselect.js.org et comprend une introduction, une explication du fonctionnement de Reselect, des références d'API pour `createSelector`, `createSelectorCreator`, `createStructuredSelector`, les vérifications de développement, `lruMemoize`, et `weakMapMemoize`, ainsi qu'une FAQ. Utilisation de base : `createSelector` accepte un ou plusieurs sélecteurs d'entrée qui extraient des valeurs des arguments, et une fonction de résultat qui reçoit les valeurs extraites et renvoie une valeur dérivée. Le sélecteur de sortie généré ne recalcule que lorsque les valeurs extraites changent. Le README inclut un exemple montrant qu'un sélecteur simple s'exécute à chaque appel, tandis qu'un sélecteur mémoïsé ignore le recalcul et renvoie la référence de résultat existante lorsque les entrées sont inchangées. Cette stabilité de référence est notée comme importante pour des bibliothèques comme React-Redux et React qui s'appuient sur des vérifications d'égalité de référence pour optimiser les mises à jour de l'interface. Le README définit la terminologie : fonction sélecteur, sélecteurs d'entrée, sélecteur de sortie, fonction de résultat et dépendances. Les changements de la version 5.0.0 décrits incluent : - Personnalisation : objet d'options pour `createSelectorCreator` avec des fonctions `memoize` et `argsMemoize` personnalisées et leurs options ; `createSelector` prend en charge la personnalisation directe de `memoize` et `argsMemoize`. - Mémoïsation : nouvelle fonction de mémoïsation par défaut `weakMapMemoize` ; `memoize` et `argsMemoize` exposés sur les champs du sélecteur de sortie pour le débogage. - TypeScript : prise en charge des versions de TypeScript inférieures à 4.7 interrompue ; performances TypeScript améliorées pour l'imbrication des sélecteurs de sortie, avec la limite d'imbrication passée d'environ 8 à environ 30, réduisant les erreurs d'instanciation de types profonds. - API : suppression de la deuxième surcharge de `createStructuredSelector` en raison de sa susceptibilité aux erreurs d'exécution. - Fonctionnalités supplémentaires : `dependencyRecomputations` et `resetDependencyRecomputations` sur les champs du sélecteur de sortie ; `inputStabilityCheck`, outil de développement qui exécute les sélecteurs d'entrée deux fois avec les mêmes arguments et avertit si les résultats diffèrent ; `identityFunctionCheck`, outil de développement qui vérifie si la fonction de résultat renvoie sa propre entrée. - Changements cassants : suppression des types `ParametricSelector` et `OutputParametricSelector`, leur fonctionnalité étant intégrée dans `Selector` et `OutputSelector`. Le projet est sous licence MIT. Il a été initialement inspiré par les getters de NuclearJS, les abonnements de re-frame et une proposition Redux.