Um momento
Aula 14
Cursos / O Conceito de Seletor (Selector) - React & Redux
Como Usar o Reselect para Criar Seletores Memoizados (Memoization / Memoização)

Summary

Aula sobre Reselect

Instalação do Reselect

  • Iniciamos a aula instalando a biblioteca reselect utilizando o terminal:
    npm install reselect
    
  • Confirmamos a instalação da versão 4 no package.json.

Criando um Selector com Reselect

Usando a Função createSelector

  • A principal função que vamos utilizar é a createSelector do reselect, que cria um selector memoizado.
  • Para usar createSelector, é necessário importar:
    import { createSelector } from 'reselect';
    

Estrutura do Selector

  • createSelector aceita selectores como argumentos, seguidos por uma função que recebe os resultados desses selectores.
  • Exemplo de definição de um selector:
    const bandaSelector = createSelector(
      [bandasHashSelector, bandasListaSelector],
      (bandasHash, bandasLista) => {
        // Implementação
      }
    );
    

Comparação de Selectores

  • Um selector original é usado diretamente sem composições.
  • O selector com createSelector permite a composição de vários selectores, proporcionando melhor performance e eficiência ao evitar cálculos repetidos.

Funcionalidade de Memoização

  • O selector com createSelector é memoizado, ou seja, ele armazena resultados das computações. Se os parâmetros não mudarem, ele não executa a lógica novamente, melhorando a performance da aplicação:
    • Exemplo de uso em ação:
      • Se o state (banda hash e lista) não mudar, o selector não recalcula e evita chamadas desnecessárias.

Conclusão da Aula

  • Aprendemos a:
    • Criar selectors usando createSelector.
    • Compor selectores para otimizar a lógica.
    • Utilizar a memoização para evitar computações repetitivas.

Exercício Proposto

  • Como exercício, sugiro implementar um selector chamado bandoFavoritoSelector utilizando reselect.

Até a próxima!

Video Transcript

Olá a todos nesta aula vamos instalar o reselect e criar nosso primeiro selector usando reselect vamos lá primeiro vamos instalar o reselect usando o terminal aqui estou no diretor do projeto chamado bandas o da npm install re sl e e tá reselect final pouquinho pronto instalou o select versão 4 olha aqui no package ponto de json versão 4 já nesse vídeo vamos estamos usando versão 4 pronto instalamos o reselect agora vamos lá no nosso selector vamos fazer o seguinte do banda selector por exemplo nós vamos recriar o banda selector usando o reselect como a gente vai fazer isso fazer o seguinte então antes de partir para isso no reselect a função mais base que a gente vai aprender é a função create selector tá essa função funcionar a seguinte maneira esse cara vai criar um selector memoizado tá selector selector memoizado acho que esse é o termo em português se você tiver um que tem agora isso vale bom a create selector tá esse cara eu vai vir do criat selector selector tá eu vou escrever aqui então o a função é que a selector não esqueça das chaves do pacote reselect você vai chamar assim agora os argumentos então os primeiros argumentos tá vão ser selectores tá você tem que passar selectores e o último argumento vai ser a uma função que vai usar com argumentos cada valor referenciado pelos selectores tá por exemplo por exemplo voltando aqui no bando selector nós usamos que selectoris dentro do bando selector nós usamos o bandas a selector e o bandas de selector temos dois selectores que a gente usa dentro de selector então nós diríamos primeiro tá põe o primeiro selector que você está usando bandas acho selector depois qual o segundo selector põe a vígula vai ser o bandas lista selector tá pronto terminamos a lista de selectores que serão utilizados dentro desse selector tá composição de selector então esse é o selector para a banda selector vamos botar aqui a consta bando selector esse cara agora o terceiro argumento argumento vai ser uma função é eu abri a função aqui os argumentos para a função serão os valores bandas hash e banda lista respectivamente tá bandas hash e o bandas liste então os selectores que forem listados antes da função serão usados como argumento tá o valores que se referem a cada selector serão usados como argumento em sequência nessa última função aqui então você vai poder usar o bandas hash e o id nesse caso que eu falei usando essas duas variáveis aqui bandas hash e bandas liste tá e com isso é só você fazer operação que quiser nesse caso a gente está mapeando os id liste de id para lista de objetos então você pode dizer return bandas lista ponto meta tá o id da banda banda id e você vai retornar o que é a torna bandas hash usando banda id tá vamos comparar aqui na do lado e um com o outro do lado esquerdo temos o selector original sem usar o reselect lá direto temos o selector usando reselect tá então você se tiver normalmente você usa isso quando já tiver composição de setores se você não tiver se você já tiver selector só usando o caminho por exemplo banda banda lista selector que tiver state quando banda lista não é ok não precisa nem usar a crade selector é só que definir dessa maneira aqui mas se você tiver um selector que utiliza outros setores é a composição você pode criar usando crade selector passa a lista de setores que serão utilizados e no final passa uma função essa função corresponde a os valores correspondentes para selector listado em ordem bandas é selector vai te dar o bandas hash que vai aparecer na variável bandas hash bandas lista selector vai te dar aquela lista de id que aparecer na variável bandas listo e aqui no corpo você faz a mesma operação que a gente fez anteriormente aqui tá e essa lista pode ser não me possa 2 3 4 pode ser 1 2 3 4 sim por diante mas sempre no final essa é a função tá só como nota vale a pena também dizer que também tem outra maneira de definir esses setores eu acho que você pode usar uma lista o vetou em vez de botar separados por viva você olhar lá a documentação do select ele te diz que você pode fazer isso tá a nota que ele fez a maneira que ele fez a não sei se ele tem aqui dizendo que também for usar uma vetou e aí e aí e aí e aí e aí e aí e aí aqui ó nessa parte que ele diz do criado selector ele diz que você pode passar sim tá ou você pode passar uma vetou tá de selectores tá diferença essa primeira é só um argumento que é uma lista de vetores nessa outra o outro que a gente fez é vários argumentos passados pro criado select não é só um dentro de um vetou tá você preferir eu faço dessa maneira aqui tá certo faltando aqui vamos utilizar testar esse cara eu vou comentar o selector banda selector anteriormente anterior vou pegar esse cara aqui copiar e eu vou recortar pra cá e vou pegar esse import porque a gente precisa importar lá em cima lá pra cima do arquivo import e select do reselect não esqueça da chave voltando aqui eu vou copiar esse console log eu quero manter dentro do corpo do selector aqui tá aqui e salvar não se esqueça de dar o export consta pronto e corta e seguir e salvar vamos ver o que deu lado esquerdo aqui e aí e então resolver aqui é iniciar o aplicativo a lista de bandos ainda está lá corretamente e o perfil a gente nem pediu o perfil mas lista tá ok que acontece quando a gente clica clica aqui e aí e aí então ele deu um clique chamou o mapa state props mas não chamou banda selector olha aqui não chamou esse console log clica aqui deu um clique map state eu clique map mas não chamou banda selector porque porque ele tá meio moizado isto é ele já fez computação na primeira vez com o que a entrada primeiro tem duas entradas aqui duas bandas hash e bandas liste note que aquela mudança dos estados do redux que a gente fez emitindo aquela ação se lembra modificar estado que adicionou a sua nova propriedade não modificou quem não modificou os dados que são referidos pelo bandas hash bandas liste que são quem bandas hash esse cara aqui não modificou esse não mudou e o bandas liste não mudou também né então nenhum desse cara mudaram por causa disso né a entrada não mudou a computação foi feita uma vez anteriormente o geselect armazenou o resultado daquela computação que nesse caso é o mapeamento desses três objetos dentro de um e ele só fez uma vez na próxima vez né ele não executa a computação nesse caso quando eu falo computação eu falo a execução desse corpo aqui dessa função ele não chamou console log tá e isso foi memoizado se você imaginar que esse banda selector você generalizar isso e você vai no selector que faz muita computação não precisa ser essa maneira que pode ser um cálculo massívulo muito pesado ele só vai fazer uma vez para a mesma entrada e saída né então ele não vai chamar o corpo aqui para calcular de novo por causa da memoização tá muito importante isso e essa motivação uma das motivações para usar o reselect então aprendemos nessa aula fazer revisão aqui aprendemos a criar o um selector usando o reselect qual é a função create selector que vem do pacote reselect dá o import com as chaves aí passa a lista de selectores como argumento separado por vírgula e seguindo no final o último argumento é uma função que tem o número de parâmetros correspondente ao número de selectores listados anteriormente e cada um desses caras os dados que forem referidos para o selector aparecerão como variáveis do parâmetro da função você pode usar para poder retornar o valor que você quiser desse selector esse selector é memoizado um criado select significa que se você tiver a mesma entrada né esse cara bandos reaixo bandos lista foi o mesmo depois da primeira vez que esse selector foi executado ele não vai executar o corpo do setor novamente ele vai usar o valor que foi computado anteriormente para mesma entrada é memoizado tá então normalmente o criado select usado quando você tem a composição de selectores se você tem um selector bem simples bem simples que você só faz pegar por exemplo bandas reaixo só pega a state bandas bandas esse é um selector simples que você não precisa usar o criado selector que é só retornar a state bandas bandas não precisa de criado selector selector quando você vai fazer um selector que usa a composição para que usa o selector certo e voltando aqui só no documentação quando você olhar o reselect tá ele usa as funções definições de funções de maneira curta tá em retorno eplista olha que ele define os selectores assim mas é a coisa que eu fiz aqui eu fiz maneira explícita com retorno explícita tá pra poder clarificar o que é os caras mas eles aqui na documentação ele usa dessa maneira aqui tá o retorno implícita mesma coisa tá certo Então, por essa aula é só, espero que tenham gostado, você pode usar o re-selectar para fazer os seus seletores memoizados para não ter que fazer computação dos valores novamente, toda vez que o maps.tiprops for chamado. Então, deixe-o como exercício, você pode fazer o, você pode tornar o bando o favorito seletor, um seletor memoizado usando o re-select, tá? Então, por essa aula é só e até a próxima.
Nenhum comentário ainda (loading...)
Nenhum comentário ainda (loading...)
Gostou da aula? 😆👍
Apoie nosso trabalho com uma doação: