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.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.