Sobre o projeto

Reselect é uma biblioteca para criar funções "seletoras" memoizadas. Ela é comumente usada com Redux, mas também pode ser usada com qualquer dado imutável em JavaScript puro. Características principais descritas no README: - Seletores podem computar dados derivados, permitindo que o Redux armazene o estado mínimo possível. - Seletores são eficientes: um seletor não é recalculado a menos que um de seus argumentos mude. - Seletores são compostíveis: podem ser usados como entrada para outros seletores. O projeto aponta para a página da documentação do Redux sobre derivação de dados com seletores para contexto sobre propósito, motivação e padrões de uso típicos, incluindo o uso com React-Redux. Opções de instalação: - Redux Toolkit: Reselect já está incluído por padrão no pacote oficial do Redux Toolkit, portanto nenhuma instalação adicional é necessária. Ele pode ser importado como `createSelector` de `@reduxjs/toolkit`. - Autônomo: instale o pacote `reselect` via npm, Yarn ou pnpm. A documentação está hospedada em reselect.js.org e inclui uma introdução, uma explicação de como o Reselect funciona, referências de API para `createSelector`, `createSelectorCreator`, `createStructuredSelector`, verificações apenas em desenvolvimento, `lruMemoize` e `weakMapMemoize`, além de um FAQ. Uso básico: `createSelector` aceita um ou mais seletores de entrada que extraem valores dos argumentos, e uma função de resultado que recebe os valores extraídos e retorna um valor derivado. O seletor de saída gerado recalcula somente quando os valores extraídos mudam. O README inclui um exemplo mostrando que um seletor simples executa a cada chamada, enquanto um seletor memoizado pula o recálculo e retorna a referência do resultado existente quando as entradas não mudaram. Essa estabilidade de referência é destacada como importante para bibliotecas como React-Redux e React, que dependem de verificações de igualdade de referência para otimizar atualizações de UI. O README define terminologia: função seletora, seletores de entrada, seletor de saída, função de resultado e dependências. As mudanças da versão 5.0.0 descritas incluem: - Customização: objeto de opções para `createSelectorCreator` com funções `memoize` e `argsMemoize` personalizadas e suas opções; `createSelector` suporta customização direta de `memoize` e `argsMemoize`. - Memoização: nova função de memoização padrão `weakMapMemoize`; `memoize` e `argsMemoize` expostos nos campos do seletor de saída para depuração. - TypeScript: suporte para versões do TypeScript abaixo de 4.7 descontinuado; desempenho melhorado do TypeScript para aninhamento de seletores de saída, com o limite de aninhamento aumentado de cerca de 8 para aproximadamente 30, reduzindo erros de instanciação profunda de tipos. - API: removida a segunda sobrecarga de `createStructuredSelector` devido à suscetibilidade a erros em tempo de execução. - Recursos adicionais: `dependencyRecomputations` e `resetDependencyRecomputations` nos campos do seletor de saída; ferramenta de desenvolvimento `inputStabilityCheck` que executa os seletores de entrada duas vezes com os mesmos argumentos e avisa se os resultados diferirem; ferramenta de desenvolvimento `identityFunctionCheck` que verifica se a função de resultado retorna sua própria entrada. - Mudanças que quebram compatibilidade: removidos os tipos `ParametricSelector` e `OutputParametricSelector`, com sua funcionalidade integrada em `Selector` e `OutputSelector`. O projeto é licenciado sob MIT. Foi originalmente inspirado por getters no NuclearJS, assinaturas em re-frame e uma proposta do Redux.