GithubHelp home page GithubHelp logo

alice7h / alura-event-tracker Goto Github PK

View Code? Open in Web Editor NEW
0.0 2.0 0.0 434 KB

Curso Alura - React: gerenciando estado com Recoil , ministrado por Marcos Vinicios da Silva Neves

HTML 4.76% SCSS 19.18% TypeScript 74.18% CSS 1.88%

alura-event-tracker's Introduction

event tracker banner

Curso - React: gerenciando estado com Recoil

Curso ministrado por Marcos Vinicios da Silva Neves

Atoms

Atoms são unidades de estado, é possível atualizar e ler estes estados de uma forma fácil.

É possível conectar seus components a estes Atoms para que quando eles sejam atualizados os components sejam renderizados novamente.

Ao invés dos estados locais dos components, podemos utilizar atoms para compartilhar os estados entre muitos components.

Acessar atoms

Nós utilizamos o hook useRecoilValue para ter acesso à lista de eventos.

Modificar atoms

Nós utilizamos o hook useSetRecoilState para adicionar novos itens à lista de eventos.

Manipulamos o hook com o useSetRecoilState, ele funciona da mesma forma que o useState e nos retorna o getter e o setter. Ex: const [tamanhoDaFonte, setTamanhoDaFonte] = useRecoilState<number>(tamanhoDaFonteState)

Selectors

Os Selectors sâo funções puras (que tem como objetivo devolver valores derivados dos Atoms) que recebem um Atom como argumento, quando o Atom que veio como argumento é atualizado o selector também atualiza o valor de retorno.

Assim como no caso dos Atoms, os Components também podem se ‘inscrever’ para serem avisados quando os selectors forem atualizados, quando isso acontece eles são renderizados novamente.

Seletores Async e Depuração

Criamos um seletor assíncrono chamado eventosAsync que faz a busca de eventos.

Indicamos valores padrões para o átomo, no caso da lista de eventos, por padrão ela recebe o valor assíncrono do seletor.

Observamos alterações no estado com o componente DebugObserver

Remover eventos do estado

Removemos utilizando o método filter.

indexOf: para obter um determinado índice de um elemento num array.

slice: para remover, a partir de um índice, uma quantidade N de elementos. Atualizar um evento específico

Hook customizado

Criamos um hook reaproveitável e responsável por atualizar um evento, inclusive encapsulando o recoil.

onEventDragFinish

Usamos o método onEventDragFinish para que toda vez que eu mudasse um evento de posição no calendário, a datas desses eventos fossem atualizados.

Diminuir o acoplamento da aplicação

Ao extrair a comunicação com o recoil em hooks, estamos desacoplados da lib em si.

Se trocarmos por qualquer outra solução, estaremos prontos. Só precisamos alterar os hooks, e não os componentes.

Aumentar a coesão

Ao remover a responsabilidade de alterar o estado para os hooks, nossos componentes ficam mais coesos e não precisam se preocupar com as implementações relacionadas a manipular o estado.

Suspense

O componente Suspense do React permite inserir efeitos colaterais declarativamente dentro de qualquer elemento na árvore de componentes a partir do momento que você jogar uma Promise na sua pilha de chamadas atuais.

Ajuda a lidar com operações assíncronas, permitindo que você aguarde o carregamento de algum código e especifique um estado de carregamento (como um spinner) enquanto espera.

O Suspense também pode ser usado para buscar outros recursos como imagens, scripts ou outros trabalhos assíncronos.

Json Server

O servidor JSON é um módulo de nó que você pode usar para criar serviços JSON REST de demonstração em um curto período de tempo.

Para rodar ele, adicionamos algumas configurações no package.json, então é só usar o npm run server.

Usamos ele para fazer uma demonstração de requisições assíncronas.


Rode npm run server para rodar o json server e o npm start para rodar a aplicação.

Aplicação do instrutor encontra-se no github de viniciosneves

alura-event-tracker's People

Contributors

alice7h avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.