Тёмный

Talvez você não precise de estados globais no React (HTTP State) 

Rocketseat
Подписаться 364 тыс.
Просмотров 34 тыс.
50% 1

Conecte-se a 500mil devs e avance para o próximo nível com a nossa plataforma: rocketseat.com.br/
Cadastre-se na nossa plataforma: app.rocketseat.com.br/signup
Junte-se a mais de 392mil devs em nossa comunidade no Discord: / discord
Acompanhe a Rocketseat nas redes sociais:
Twitter: @rocketseat
Facebook: @rocketseat
Instagram: @rocketseat

Опубликовано:

 

23 янв 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 110   
@felipecouto9044
@felipecouto9044 4 месяца назад
Só um comentário adicional caso alguém tenha ficado na dúvida... Ele não faz requisição pra atualizar a listagem toda, isso é via cache, mas é feita a requisição pra enviar o post do novo produto pra API
@dieegosf
@dieegosf 4 месяца назад
Exato, obrigado Felipe!
@mateusjsouza
@mateusjsouza 4 месяца назад
Tava procurando conteúdo sobre isso e aparece isso no meu yt. Bom demais, mano. Vou começar a usar react-query nos meus projetos pra solidificar o conhecimento.
@wollyverkk2263
@wollyverkk2263 4 месяца назад
Bacana, eu geralmente usava a função refetch que vem de dentro do useQuery, e então refazia a requisição. Vou começar tentar essa nova abordagem
@josephkaltenecker7904
@josephkaltenecker7904 4 месяца назад
Muito interessante esse update do cache. Trabalhei numa fintech e usávamos React Query. No caso de uma mutation, eu fazia um invalidateQuery no cache key (que eram armazenadas num outro arquivo) e rolava um refetch, atualizando em todos os lugares que usavam essa cache key. Acho que por ser um app de investimentos, fazer um invalidate é mais interessante dado que outros usuários influenciam nos dados em tela React Query é incrível pois nos possibilitou abandonar de vez o Redux (pessimamente configurado) Parabéns Diego pelo ótimo conteúdo
@raphox
@raphox 4 месяца назад
Eu também não entendi bem o motivo dele ele não ter utilizado o invalidateQuery. Em outro vídeo eu vi ele fazendo a mesma coisa. Você acha que há alguma razão para utilizar a abordagem dele ao invés do invalidateQuery?
@rickxzz
@rickxzz 4 месяца назад
​@@raphox a razão é que em alguns casos você não precisa fazer outra requisição http para manter o estado da sua aplicação atualizado, principalmente se for em um caso que apenas um usuário influencia nos dados da tela, como dito pelo joseph
@raphox
@raphox 4 месяца назад
Na documentação (na parte de 'Persist mutations') ele utiliza o resultado da request da mutation para definir os dados do novo elemento.
@dieegosf
@dieegosf 4 месяца назад
Sim, perfeito, em alguns tipos de apps um invalidate é muito melhor que atualizar o cache, tipo um saque no banco, você quer que o saldo sempre seja o mais fiél possível, não faz sentido ficar controlando cache no front-end.
@viniciusneto6824
@viniciusneto6824 4 месяца назад
Boa! Trabalho num produto admin utilizado por 1,5k operadores diariamente. Ele tem diversas listagens de recursos de mais de 1,5M de clientes. Então estão sempre sofrendo mutações. Por conta desse cenário utilizamos o invalidate. Mas utilizamos o RTK Query. A feature de invalidação e refetch automático dele é muito mais fácil de gerenciar do que o do React Query. Mas ambas são excelentes soluções pra data fetching e caching!
@user-sg8qt1sg3b
@user-sg8qt1sg3b 4 месяца назад
Diego, tu é muuuito bom cara.
@DiegoCarreiraFr
@DiegoCarreiraFr 4 месяца назад
Excelente conteudo!!
@matheusquirino2287
@matheusquirino2287 4 месяца назад
voce é insano!
@Gabriel-zm6tq
@Gabriel-zm6tq 4 месяца назад
Lib show! So cuidar pra nao arrebentar com a memoria do client
@dev.caixeiroviajante
@dev.caixeiroviajante 3 месяца назад
Maneiro ! Optimistic Updates, certo ? Mas após adicionar utilizando o "variables"e preenchendo com dados "temporários" em que momento eu posso atualizar esses dados para os dados reais da api ?
@lucass.p9579
@lucass.p9579 4 месяца назад
O Next.js com o app router trouxe essa funcionalidade com o uso de revalidate, server actions, server components e etc... mas eu pessoalmente prefiro muito mais essa solução utilizando o React Query no pages router. A sintaxe é infinitamente melhor, mais simples, intuitiva e ta bem mais estavel tambem. O site roda liso demais e sem sofrimento nenhum pra fazer.
@sdhugoleo
@sdhugoleo 2 месяца назад
começando a estudar react me indicaram CRA, mas qual framework recomenda?
@mateusdanielle3052
@mateusdanielle3052 4 месяца назад
Ultimamente tenho usado o Jotai, para criar átomos globais, consigo usar ambos juntos? Ou nesse caso o React-query viria para substituir essa funcionalidade??
@lucasrochafernandes8568
@lucasrochafernandes8568 4 месяца назад
Os vídeos certos nas horas certas
@user-vs8lb6pz6s
@user-vs8lb6pz6s 2 месяца назад
Achei legal, Diego. Mas faz sentido usar para esse exemplo mesmo? É importante que exista o ID na lista de produtos e o ID só existirá quando o produto for gravado no banco de dados pelo backend. Logo, é necessário fazer uma request na API para buscar os dados no banco de dados para que o ID seja populado.
@sualeabdulsuale
@sualeabdulsuale 4 месяца назад
Bastante interessante 😇
@lucasbraga6979
@lucasbraga6979 4 месяца назад
essa live tem completa ?
@ghostbay897
@ghostbay897 4 месяца назад
Diego, pretendes ainda fazer mais video ensinando o react com o projeto de upload com tauri?
@dieegosf
@dieegosf 4 месяца назад
Simmm, vou continuar.
@guilhermevieira2115
@guilhermevieira2115 4 месяца назад
Eu posso substituir o reducer por um http state ou o resultado ficaria o mesmo?
@carlosamorim94
@carlosamorim94 4 месяца назад
Diegão, num cenário Next, utilizar o SWR em vez do React Query seria uma alternativa "melhor"? Pois é desenvolvido pela própria Vercel...
@dieegosf
@dieegosf 4 месяца назад
Não
@GabrielPaivaMusic
@GabrielPaivaMusic 4 месяца назад
Agora fique com uma dúvida. Já que é muito mais performático utilizar HTTP State, quando utilizar outras abordagens como estados globais?
@icarobteles
@icarobteles 4 месяца назад
Normalmente, quando eu ainda utilizava um state normal do React para lidar com requisições à API, normalmente também não fazia uma nova requisição GET para atualizar todos os dados. Se fosse um create, por exemplo, faria a requisição create e com o retorno desta sendo o novo dado criado, eu acrescentaria isso ao state, o que já seria refletido em tela, sem necessidade do refetch.
@dieegosf
@dieegosf 4 месяца назад
Exato, mas daí sem o React Query precisamos ficar passando funções de dentro de um componente para o outro ou criar um contexto para atualizar esses dados.
@StephaniLacerda
@StephaniLacerda 4 месяца назад
Agora com revalidate do nextjs, nem precisa mais pois uma round trip já atualiza o componente atrás do modal, usando as server actions
@lucascoliveira3957
@lucascoliveira3957 4 месяца назад
Era esse comentário que eu estava procurando. Vc acha q compensa fazer um app de dashboard igual esse q ele fez, direto no next por causa das server actions?
@dieegosf
@dieegosf 4 месяца назад
Sim, mas ainda é algo difícil de ter como "padrão" pra toda aplicação, ainda está muito embrionário e, dado experiências pessoais, com muitos bugzinhos misteriosos.
@fabioribeirodecarvalho2382
@fabioribeirodecarvalho2382 2 месяца назад
Mas digamos que mais de um usuário atualizou a lista. A lista iria ficar desatualizada justamente porque não foi feita a requisição. Sei que nesse caso iria abrir espaço para uma discussão de websocket e etc. Porém se a lista tiver muitas atualizações a conexão não for "socket" não vale a pena carregar de novo a lista, visto que os dados seriam mais confiáveis...meio q um trade-off
@luanscar6371
@luanscar6371 15 дней назад
tem como usar server actions no mutationFn?
@lucianoseibel
@lucianoseibel Месяц назад
de qual video eh este corte?
@Joanneswsquim
@Joanneswsquim 4 месяца назад
Subatituiria o zustand também? Como seria para outros componentes que nao usaria necessariamente requisição, mas alteração de layout?
@dieegosf
@dieegosf 4 месяца назад
Depende com qual propósito, se você usa Zustand pra salvar os dados provindos de requisições HTTP então sim.
@alewhois
@alewhois 3 месяца назад
Qual é essa extensão que chama o gpt?
@mauricioporfirio8072
@mauricioporfirio8072 4 месяца назад
Eu só fiquei confuso em relação as variáveis (isPending, isFetching, isLoading) qual a diferença entre elas? É uma diferença notória ou não?
@fabiobeutler1017
@fabiobeutler1017 4 месяца назад
isLoading é o resultado da junção da informação de que não há informação no cache ainda (isPending) + a informação de que a queryFunction foi chamada, ou seja, isLoading = isPending && isFetching Essa diferença existe porque há a possibilidade de instanciar uma query sem invocar a queryFunction ao mesmo tempo, controlando, portanto, o tempo que ela fica pendente até ter seu carregamento iniciado. E o isLoading indicará assim o primeiro carregamento desse dado (sem cache + execução da função)
@murilom1723
@murilom1723 4 месяца назад
E na documentação têm tudo bem explicado tbm
@LucasSouza-ev2wb
@LucasSouza-ev2wb 4 месяца назад
Uma dúvida, se eu tenho um sistema que atualiza uma lista de produtos e uma outra que lista esses produtos tipo em um select, quando eu atualizo pelo cache, essa atualização pode ser vista na outra tela que tem o componente de produto?
@dieegosf
@dieegosf 4 месяца назад
São aplicações diferentes? Se sim, então você não conseguirá ver isso refletindo não. Só funciona se for a mesma aplicação com duas páginas diferentes, daí sim.
@euyokan
@euyokan 4 месяца назад
Eu percebi que quando você deu F5, o produto que você inseriu, não se manteve no cache do React Query. Foi por você estar em desenvolvimento e ter atualizando o código pra adicionar um id? 12:42
@dieegosf
@dieegosf 4 месяца назад
O cache não é persistente entre as atualizações de página e, como eu não estava realmente salvando o produto em um banco de dados ou algo do tipo, ele vai se perder da listagem mesmo.
@euyokan
@euyokan 4 месяца назад
​@@dieegosf Então no caso se eu quiser a lista atualizada mesmo dando F5 após inserir, eu precisaria fazer refetch?
@dieegosf
@dieegosf 4 месяца назад
@@euyokan Quando você dá F5 na verdade tudo vai dar refetch, isso é padrão do browser. Até existem estratégias pra fazer storage do cache, mas não sei até que ponto vale a pena (tanstack.com/query/v4/docs/react/plugins/persistQueryClient).
@joaogustavoferreira7136
@joaogustavoferreira7136 4 месяца назад
Fala Diego blz? Pode explicar a fundo por que você nomeeia de HTTP state, esta biblioteca me parece seguir a arquitetura FLUX adicionando um JS global state e manipulando isto a cada requisição.
@joaogustavoferreira7136
@joaogustavoferreira7136 4 месяца назад
Provavelmente por que deve estar usando e manipoulando Cache do Browser
@Brenosalv
@Brenosalv 4 месяца назад
Daora demais. Podemos dizer adeus ao Redux? Eu ouvi um amém, meus irmãos???
@dieegosf
@dieegosf 4 месяца назад
Hahaha, não necessariamente, só não precisamos mais usar o Redux pra guardar dados provindos das requests HTTP
@andersonnascimento9864
@andersonnascimento9864 4 месяца назад
No caso do Next.js com as server-actions é viável ainda o uso do react-query?
@dieegosf
@dieegosf 4 месяца назад
Claro! Não é porque temos a HABILIDADE de usar Server Components que devamos deixar de lado toda reatividade do React e nunca mais usar código client-side...
@renao_
@renao_ 4 месяца назад
@@dieegosf pensando em um uso pra fetchs em server components e cache dos dados, o react query tem alguma vantagem em cima das actions nativas do nextjs? to analisando se devo utilizar uma lib pra isso ou se fico com as soluções nativas do framework
@rodrigomedeiros773
@rodrigomedeiros773 Месяц назад
@dieegosf acho que a pergunta dele deve ter sido pertinente em relação ao revalidatePath() , acha válido usar? Mesmo tendo o revalidatePath?
@leonardoreis674
@leonardoreis674 4 месяца назад
Este metodo com filtros implementados nao funciona bem, se tiver usando por algum acaso um searchParams, e o query estive por volta de duas paginas que tem filtros utilizando o searchParams, os dados de ambas irao ser atualizados o que pode causar em algum momento um problema se estiver usando os dados para algo, como me ocorreu essa semana
@gurmiguel
@gurmiguel 4 месяца назад
Na verdade funciona, a questão é que o queryKey usado na query e mutation precisa também conter esses parâmetros, assim os updates também só vão atualizar as queries que tiverem esses parâmetros
@leonardoreis674
@leonardoreis674 4 месяца назад
nao falei sobre isso, se voce tiver na pagina X e fizer a listagem e nessa pagina tem ?search=maria, e voce mudar para pagina y e tiver search=jose ambos vamo mudar, no meu caso eu precisava da lista de maria na pagina jose, ela tambem ira mudar obviamente se estiver por volta das duas paginas, nao falei de mutation em momento nenhum, estou falando de persistencia@@gurmiguel
@MarcusTorres-zv5cv
@MarcusTorres-zv5cv 4 месяца назад
No remix isso e feito automático, isso se chama Optmistic Ui
@dieegosf
@dieegosf 4 месяца назад
Opa Marcus, beleza? Na verdade, me corrija se eu estiver errado, Optimistic UI é quando mostramos o valor "atualizado" mesmo antes da requisição para o back-end ter sucesso e, caso tenha erro no futuro, a gente volta o valor original. A atualização de cache em si pode ser usada para interface otimista mas não necessariamente configura o uso da prática. Mas nesse projeto usamos interface otimista na atualização do perfil: github.com/rocketseat-education/pizzashop-web/blob/main/src/components/store-profile.tsx#L75
@LimaGabriel1
@LimaGabriel1 4 месяца назад
pode ser feita uma chamada para buscar somente o item incrementado e atualizar o estado com ele.
@dieegosf
@dieegosf 4 месяца назад
O useMutation já tem acesso aos dados do item incrementado através do primeiro parâmetro do método "onSuccess" então não precisa fazer uma nova chamada.
@LimaGabriel1
@LimaGabriel1 4 месяца назад
@@dieegosf digo, para caso precise buscar dados gerados pelo servidor. como o id. sem ele muitos processos de associação não funcionaria. por isso comentei, que podemos ao invés de buscar a lista toda, usar o retorno da api que geralmente devolve o item adicionado. pois no exemplo usou os dados do usuário.
@ohervis
@ohervis 4 месяца назад
Mas não era só fazer um push no array com o novo produto?
@dieegosf
@dieegosf 4 месяца назад
Não, o React não vai monitorar uma nova informação surgindo no array de forma automatizada.
@marcelo55850
@marcelo55850 3 месяца назад
podia explicar utilizando uma api real
@victoralecrim4412
@victoralecrim4412 4 месяца назад
Cara qual teclado o diego usa ?? queria saber muito pq faz um barulhasso kkkk
@dieegosf
@dieegosf 4 месяца назад
Keychron K2
@rodrigobrito20
@rodrigobrito20 4 месяца назад
Tenho muito problema com isso, de atualizar um dado e precisar de um refresh na página. Uso o redux para gerenciar minhas requisições. Como consigo fazer isso, ou algo proximo, sem o uso do react-query?
@dieegosf
@dieegosf 4 месяца назад
Se você usa Redux, o melhor é o RTK Query que tem o mesmo propósito mas com integração para Redux
@riadyounes00
@riadyounes00 4 месяца назад
Onde sao feiras essas lives?
@dieegosf
@dieegosf 4 месяца назад
Twitch (usuário dieegosf)
@godzzrl
@godzzrl 4 месяца назад
O que ele está usando no começo do vídeo para conseguir fazer pesquisa no gpt com search bar avulsa?
@lucas.fellipe.c
@lucas.fellipe.c 4 месяца назад
é o raycast, é um app pra macos!
@godzzrl
@godzzrl 4 месяца назад
@@lucas.fellipe.cvlww
@walkdead94
@walkdead94 4 месяца назад
Interessante... mas existe um motivo de enviar essa info pro back, ele é quem vai validar e criar a entrada (por isso não tem id)... se minha aplicação compartilha a api com outras eu posso até criar problemas de dados seguindo esse padrão... Eu sinceramente não vejo como colocar isso pra rodar a não ser que eu não precise de back, ou que ele só sirva pra se comunicar com o Banco...
@minimovzEt
@minimovzEt 4 месяца назад
esse caso que ele mostrou ele usou dados de exemplo e chamadas dummy, no mundo real obviamente a requisição do servidor irá retornar o estado atual da entidade e você poderá salvar na lista, isso é um pattern basicão que só ficou "complicado" pelo uso de biblioteca externa pelo react ser uma bosta.
@DouglasCastrodaSilva
@DouglasCastrodaSilva 4 месяца назад
Achei a lib legal e facil de usar mas pra mim isso parece um global state d qlqr forma. Assim como no redux vc tinha store.estado.propriedade vc agora tem um cache[key].propriedade; Essa funcao de mutation é a msm coisa q um dispatch de uma action do redux; e essa funçao setQueryData é o reducer q atualiza a store. Em outras palavras, pra mim essa lib é um redux 2.0 com uma sintaxe melhor q criar aquelas funcoes de mapDispatchToProps e mapDispatchToProps. Sobre "HTTP state" acho q é uma limitacao da funcionalidade q essa lib entrega pois podemos armazenar esses caches de qlqr operacao executada e nao apenas as operacoes oriundas de requisicoes HTTP. Ex.: poderiamos ter um cliente q se conecta a um websocket e a cada evento ouvido atualizamos o cache atraves de uma mutation.
@DjEdu28
@DjEdu28 4 месяца назад
Sim, Douglas, e até nos exemplos do RQ (reacr-query) ele trabalha com requisições que nem usa o http, justamente para os iniciantes não se limitarem apenas a isso. E com RQ podemos definir a validade do cache, o tempo que ele ainda é valido (mesmo que vencido) e o período que queremos para ele ser revalidado. Ele é muito útil para rodar a aplicação mesmo sem conexão com a internet. Também possui funcionalidades para ativar a revalidação quando o usuário volta a página e/ou quando o componente é renderizado/montado em tela
@brunohenrique7369
@brunohenrique7369 4 месяца назад
Fica a dúvida agora de como resolver o ID, eu gero ele no front ou mando pro back e ele resolve?
@dieegosf
@dieegosf 4 месяца назад
Geralmente o back-end devolve isso na resposta da requisição, essa resposta vem no primeiro parâmetro do "onSuccess" que renomeamos ali no vídeo para "_" então basta usar essa resposta e você terá o ID e os demais dados provindos do back-end.
@brunohenrique7369
@brunohenrique7369 4 месяца назад
@@dieegosf então é simples, eu achei que era algo pra eliminar a requisição momentânea
@GABRIELR798
@GABRIELR798 4 месяца назад
Olá Diego, pararam de utilizar o chakra-ui?
@dieegosf
@dieegosf 4 месяца назад
Então, depois que o Chakra anuncionou a versão 2.0 com a quebra da lib em 4 projetos eu acabei dando um pause com ela sim.
@DjEdu28
@DjEdu28 4 месяца назад
hoje uso muito o Material UI, verifica se ele é útil para teus projetos
@luizzeduardo341
@luizzeduardo341 4 месяца назад
Quando a Rocket vai lançar a formação em Flutter?
@user-el2hs1ef8g
@user-el2hs1ef8g 4 месяца назад
Deixa de ser uma escola de programação, amigo! 😅
@luizzeduardo341
@luizzeduardo341 4 месяца назад
@@user-el2hs1ef8g Essa sua resposta só mostra que você não tem o curso pago da Rocket, pois eles tem curso de Python, Java, arquitetura e várias outras tecnologia incluindo Flutter como cursos livre, então se eles adicionarem uma trilha só de Flutter no ignite que diferença faria no que eles já são hoje "UMA ESCOLA DE PROGRAMAÇÃO". Aí pessoas como você que só assiste eles aqui no RU-vid fica aí dando opinião nada a ver, aí faz o seguinte, quando você trabalhar lá na Rocket, responde minha pergunta aqui novamente, pois minha pergunta foi direcionada para eles blz 👍
@phillipedequeiroz6296
@phillipedequeiroz6296 4 месяца назад
Isso não causaria uma inconsistência no id? Se fosse necessário deletar, o id informado estaria errado 🤔🤔
@Luis-vi6fd
@Luis-vi6fd 4 месяца назад
pensando que a api que vc ultilizou para criar a nova entrada retornar o id, você consegue pegar pra atualizar o cache, sem a necessidade de chamar o get novamente
@dieegosf
@dieegosf 4 месяца назад
Geralmente o back-end devolve isso na resposta da requisição, essa resposta vem no primeiro parâmetro do "onSuccess" que renomeamos ali no vídeo para "_" então basta usar essa resposta e você terá o ID e os demais dados provindos do back-end.
@phillipedequeiroz6296
@phillipedequeiroz6296 4 месяца назад
@@dieegosf entendii. Vlw diego 🙏🏼
@noodde
@noodde 4 месяца назад
Como faz pra abrir essa AI Assist no mac? Alguma extensão?
@dieegosf
@dieegosf 4 месяца назад
Raycast, mas a parte de AI é paga
@xavierjece_oficial
@xavierjece_oficial 4 месяца назад
Para usar com next seria a meama estratégia?
@dieegosf
@dieegosf 4 месяца назад
Sim, exatamente. Se estiver usando o App Router (Next 13+) precisa dai só sinalizar que é um client component com "use client".
@xavierjece_oficial
@xavierjece_oficial 4 месяца назад
Obrigado!! Aproveitando outra dúvida, com o next o SWR seria melhor compatibilidade ? Devi ser desenvolvido pela vercel também?
@darley_raffael
@darley_raffael 4 месяца назад
Qual é esse projeto?
@dieegosf
@dieegosf 4 месяца назад
Módulo 04 da formação React
@TheMrMatazza
@TheMrMatazza 4 месяца назад
eu só queria saber a config do macbook dele
@dieegosf
@dieegosf 4 месяца назад
M1 Max 64gb
@Shlnigamii
@Shlnigamii 4 месяца назад
Nao tem nada de conteudo python e os cara na live tavam querendo enfiar curso guela abaixo.
@ofabiobaptista
@ofabiobaptista 2 месяца назад
Sempre inventando moda pra vender curso em piá 😂
@vitvitvitvitvitvitvitvit
@vitvitvitvitvitvitvitvit 4 месяца назад
você tá usando a lib de table do @tanstack também? eles aparentemente tão construindo lib para tudo: table, form, router, etc. Só utilizei o react-query até agora, mas parece interessante o projeto deles
@mrerre2236
@mrerre2236 4 месяца назад
ele usou o shadcn/ui pra faz a table e modal
@vitvitvitvitvitvitvitvit
@vitvitvitvitvitvitvitvit 4 месяца назад
@@mrerre2236 valeu pela info, amg. nunca dei uma olhada nessa lib ainda, mas parece legal
Далее
🌮 Taco Salad Bourbon Queso Bites #Shorts
01:00
Просмотров 10 млн
would you eat this? #shorts
00:39
Просмотров 2,4 млн
tree-sitter explained
15:00
Просмотров 73 тыс.
5 Good Python Habits
17:35
Просмотров 383 тыс.
Don't Make this Golang Beginner Mistake!
8:57
Просмотров 18 тыс.
Vim Tips I Wish I Knew Earlier
23:00
Просмотров 39 тыс.
React Query - Complete Tutorial
18:57
Просмотров 100 тыс.
Generics: The most intimidating TypeScript feature
18:19