O ERRO mais comum no React (você já fez isso)
Вставка
- Опубліковано 5 лют 2025
- Um dos erros mais comuns no React (e você provavelmente já cometeu também) é a criação de estados derivados, que são estados criados a partir de outra informação já presente no componente.
Esses estados acabam causando renderizações desnecessárias, que podem ser substituídos facilmente por variáveis calculadas em tempo de execução.
Nesse vídeo eu coloco a mão na massa pra te mostrar como identificar os problemas e corrigi-los.
Bora codar?
-----
Conecte-se a 200mil devs e avance para o próximo nível com a nossa plataforma: rocketseat.com...
Cadastre-se na nossa plataforma: app.rocketseat...
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_oficial
Diego do céu, eu passei EXATAMENTE por isso hoje, e tomei a direção de ir pra uma variável normal, fui questionado e eu mesmo fiquei me questionado se era assim mesmo que deveria resolver. Esse vídeo caiu como uma luva... cara que coincidência maluca haha obrigado por esclarecer, já posso deitar mais tranquilo no travesseiro e mostrar isso pro pessoal que questionou tb :D
Bahh, que massa saber que o vídeo te ajudou, fico feliz demais! Bora pra cima 🚀
eu n precisei disso mas tbm notei q dava pra ussr variáveis comuns sem ser estados. inclusive dá pra usar classes tbm
Eu tava com sdd de um vídeo mais assim aqui no canal da Rocket. Curto, pra passar conteúdo indo direto ao ponto e sem ser pra dizer "Se quiser se aprofundar, faça nosso programa pago". Eu já estava ficando saturado de marketing (e olha que sou aluno). Então, é bom ver um vídeo da Rocket assim xD
Com certeza, gostei demais desse conteúdo com esse formato, é sempre bom variar
Concordo
Que saudade de vídeos mais curtos com um conteúdo top. Valeu Diegão, e aparece mais vezes com videos feras assim!
Top.. vlw, eu já cai nessa algumas vezes… Bora refatorar rsrsrs. Obrigado Diego
O ignite 2022 está bem melhor que o anterior. Estou aprendendo muito, parabéns!!!
Ta menos complexa as explicaçoes aprendendo entendendo muito mais.. quase terminando o modulo2
Vou comprar assim que possivel.
Tenho entrevista amanha, se tudo der certo kkkk eu compro ainda esse ano.
@@user-zv6vl6ne9z boa sorte man 🙌
fiz o ignite 2020 e gostei bastante
@@nikegamer2779 vlw mano.
Diego, parabéns novamente... Sua didática e conhecimento sempre nos surpreende. Como vc pediu, vai aí minha sugestão: como criar pacotes(libs) react + typescript para npm / yarn. Se vc já tem esse conteúdo, me indica aqui por favor...Abraços e parabéns!
Boooooa, é um dos vídeos que tenho na lista aqui pra gravação!!
Muito bom, saudades desse tipo de conteúdo. Brabo
Diegão quem nunca passou por isso que atire a primeira pedra haha, conteúdo simples e objetivo parabéns.
Vídeo muito top Diego, parabéns. Traz mais vídeos nesse estilo mão na massa pfv, ajuda muitooo
Excelente e muito necessário esse vídeo, adorei essas dicas, confesso que eu iria fazer esse filtro exatamente da primeira forma como foi implementado, e acharia normal as duas renderizações, mas com essas dicas eu já não vou mais cometer esses erros bobos.
Valeu Diegão!
Já caí nessa. kkk. Muito boa essa abordagem
cara, por conta do áudio pensei que meu PC tinha lagado nos 11:36 kkkkkk
conteúdo top Diegão, tamo junto.
Nossa já cometi muito esse erro de estados derivados. Amei o vídeo, curto mas me ensinou muito. Faz mais vídeos assim Diego, continua fazendo os longos mas faz mais vídeos curtos também tratando de coisas pontuais. Hoje por exemplo eu nem teria tempo de estudar, cheia de serviço acumulado, filho, casa... mas enquanto estava rodando uma query gigante no banco consegui assistir a esse vídeo!! 😄
Parece que foi direcionado para mim esse vídeo kkkk. Perfeito Diego, obrigado!!!
Fala Diego!
Cara, estava tentando melhorar um desempenho de uma página que estava fazendo requisição demais.
E abri o UA-cam, e me deparo com essa solução de cara. Sensacional!
Parabéns pelo ótimo conteúdo, como sempre!
Esse Diego é MONSTRO!
Eu utilizaria assim para evitar utilizar condicional dentro do jsx pra saber qual lista ser renderizada, mas curti muito seu jeito tbm, abraço!
const filters = React.useMemo(() => {
if (!search) return repos;
return repos.filter((repo) => repo.name.includes(search));
}, [search]);
Tem várias coisas que podemos melhorar no código com certeza, mas o foco era somente a parte de estados derivados, muito obrigado pelo comentário 💜
Boa cai recentemente! Mas a partir de agora consigo ter uma solução melhor! Valeu Diegão!
Diegão, me passa depois o café que tu toma para ver se fico um gênio desse jeito, uma solução tão simples e poderosa que me faz melhorar até a logica por traz do render e me faz pensar de forma mais analítica as renderização, muito massa esse vídeo
Top, curte esse formato. Continue trazendo, rápido e bem informativo.
Eu aprendi a fazer daquele jeito com vc msm kkkkkk Programacao eh muito dinamica ne, a msm pessoa q ensina de uma forma, tempo dps ensina de outra forma melhor. Muito massa! Parabens pelo conteudo. Gosto muito desse tipo de video. Abraco
Ótimo conteúdo, cara!! valeuu
Diego sensacional como sempre! Essa dica vai fazer eu subir de nível, com certeza.
Tá maluko, domina de mais, obrigado por todo compartimento cara!
Parabéns pelo vídeo, simples e objetivo, mas "matou na mosca"!
E é por essas e outras que tem tanto app ruim rodando por aí, e frustrando usuários (e outros devs que fazem manutenção no código)!
Uma grande quantidade de devs "Reacters" não entende disso aí...
Sensacional meu velho, faz tempo que busco como resolver isso, mas nunca encontrei uma solução bem explicada como essa. Vlw Diegão!
Que sensacional esse vídeo, isso acontece muito e já me deparei várias vezes nesse cenário. Valeu demais pelo vídeo Diegao e rocket 🔥🚀
Ótimo video, parabéns! No momento estou usando Tokyo Night no VS Code.
Que video delicinha kkkk
Tema VScode: Atualmente to usando o Omni da Rocketseat, depois de ficar muito tempo usando o Dracula Text Only.
Meu "padrinho" me falou exatamente isso ontem, me explicou e tal e hj caio nesse vídeo. UA-cam ta me espionando em.
baita vídeo, parabéns pelo conteúdo
Excelente aula!!!
E poderia reduzir mais o código, colocando para filteredRepos receber repos, caso condicional fosse false.
Assim, removeria a outra condicional da listagem, fazendo o map apenas em filteredRepos.
O pior do derived state é quando ele dá sinais falsos na UI. Um exemplo seria se essa lista de repositórios aí tivesse um coraçãozinho do lado pro usuário dar like.
O like dado na listra filtrada não apareceria quando o usuário apagasse o filtro (e vice-versa), já que seriam essencialmente duas listas diferentes que só parecem ser iguais.
Isso dá maior xabu.
Oq seria melhor então?
Boa, faz total sentido!
Caramba!!! Muito obrigado, eu te digo que quando migrei pra React "fiquei cego" com as useStates... Lá no meu trabalho a gente considera heresia usar variáveis assim... Mas faz muito sentido, o código fica mais limpo e otimiza a aplicação!! MUITO OBRIGADO PELO CONTEÚDO!
A dica é top, mas seria o ideal usar o useMemo, com o search como dependência, para armazenar a lista filtrada. Sei que nesse exemplo o componente é só a lista com o filtro em si, mas se fosse um componente com mais algum outro state, se esse outro state mudasse, o filter seria recalculado à cada renderização, sem necessidade.
Claro, tem muita coisa que pode ser melhor no código, o ponto era focar no estado derivado mesmo 😊 Obrigado pelo comentário!
Acredito que não tenha necessidade, o React é bem otimizado a ponto desse tipo de operação simples não prejudicar o desempenho, apenas se fosse um calculo muito pesado, até pq memoizar um valor ira ocupar endereços de memória o que pode se tornar um problema também
Sensacional! Acho que acabei de passar por esse problema, e creio que esse vídeo veio em um ótimo momento, porque agora com ideia funcionando como foi planejada posso olhar essas questões de performance e ajustar erros que antes desconhecia.
Solução simples, e muito prática. Sensacional!!
Excelente ! Muito Bem Explicado ! ! Parabéns pelos vídeos ! ! !
Que conteúdo top, parabéns!!!
Nossa que vídeo toppp, eu com certeza cai nesse erro várias vezes. Mto obg pelo conteúdo Diego😃👊
Poxa valeu...eu já cometi muito esse erro. Valeu Diego
Caraca velho, já cai nisso! Nunca pensei em fazer dessa forma tão simples e eficaz! Vou começar a rever meus códigos e ajustar eles nesses pontos. Valeu Diegão.
Sensacional! Muito obrigado pela clareza do conteúdo, demais!
Muito bom, valeu pela dica.
Quando estamos com a Internet rápida nem percebemos, mas se configurar o slow 3g no devtools começamos a perceber esses problemas que passam despercebidos as vezes.
Diegao eu programo a react a uns anos já e com certeza tem esse tipo de escolha em alguns repositórios meus rs! Muito bom esse vídeo simples e objetivo! Abs
Um gênio, na moral. Parabéns pelo conteúdo! A gente fica tão mal acostumado que não pensa no básico.
Os vídeos do Diego vc pode curtir antes de assistir kkkk. Muito feliz por conhecer essa fera pessoalmente! 👏👏👏
Outro ponto que gostaria de contribuir é sobre setar o state no instante em que o usuário digita... você não precisa fazer isso, pode-se usar, por exemplo, uma estratégia de debounce (se não sabe o que é, é uma boa hora pra pesquisar) e só buscar quando o usuário tiver certeza do que ele quer. Nesse caso aí é uma dumpList, o JS faz esse filter em um piscar de olhos, mas pensa que você precisa fazer essa busca no banco e cada letra digitada seria uma requisição.
Sim, existem mil coisas que poderiam ser diferentes, mas o ponto do vídeo é exclusivamente falar sobre estados derivados
@@dieegosf Verdade, ainda bem que ele avisou no inicio do comentário que era OUTRO ponto
normalmente eu faço requisições direto para api, onde cada letra é uma requisição, de fato isso me deixou bem pensativo sobre como pode ser um mal uso.
Eu não estava criando estados derivados pois sabia da performance, mas utilizei o truque de usar uma varável com condicional ao invés de fazer "data.filter().map()", usei apenas filteredVar.map(), deixou meu código mais bonito e "Matou" uma das várias renderizações desnecessárias que eu tava tendo.
Valeu Diegão!
Já passei por isso algumas vezes, inclusive no último projeto que eu estava, isso causava uma lentidão no form por quê o form era gigante. Muito bom o vídeo.
Faz mais videos de dicas como essa. Faz uns com umas dicas avançadas pff. Top d+ o video
Caraca 🤯! mano... Diego você é top muito obrigado, conselho mano tenta descansar um pouco eu senti que nesse video você emagreceu um pouco, não sei como esta espero que esteja tudo bem com você.. tamo junto !!!
Rapaz, que dica simples, mas extremamente útil. Como tou aprendendo a ferramenta, tava caindo nisso direto.
Diego sempre a trazer solucoes
Muito obrigado pelo video... de um ano... sou iniciante basicamente e me deparei com isso, bateu uma precupação enão consegui resolver... agora vou verificar se consigo diminuir o número de renderizações dos meus componentes... rsrsr...
Como sempre uma didática de outro planeta. Sensacional
Caí e ainda caio demais nesse erro kkkkkk
Excelente conteúdo, Diego. Parabéns 👏
Maaaano do céu kkkkkk, eu sempre cometi esse erro, que massa!!! Quando vi o thumbnail do video, já imaginei, tou errando, certeza kkkkk. Valeu diego!!
muito bacana, tenho uns repositórios que provavelmente tem esse erro ai, vou tentar aplicar. Nem sabia que tinha um nome esse erro kkkk valeu mesmo.
Conteúdo top demais, novembro vou ser calouro na turma do ignite 🚀
Meu Deus, eu sempre cai nessa. Muito obrigado Diegooooo❤
Agora ja sei porque do double rendering (!== React 18)...
Tem vezes que so de abrir a pagina, ele da double rendering (fora do React 18)..
Apos esta aula, vou prestar mais atenção...
Bem sobre o theme do VS Code....
Eu uso o theme do Github Copilot,
Mas gostei do theme que usou no video. Muito Bom...
Abraços de Moçambique, Beira
Kmk Compatriota kkk
Terra da minha mãe, que bom ver mais Moçambicanos deste lado.
Você pode ainda memoizar o resultado da função através do useMemo, pra não recalcular quando houver uma renderizacao que não envolva a variável.
Claro, tem muita coisa que pode ser melhor no código, o ponto era focar no estado derivado mesmo 😊 Obrigado pelo comentário!
Já fiz isso várias vezes, ótimo conteúdo
Hhuahuhau ja cai muito nisso! Que massa! Obrigado pelo excelente conteudo!
Muito legal esse tipo de video!
Uma dica bem legal tbm e fugindo um pouco do assunto XD é quando precisar fazer essa pesquisa conforme o usuário digita para uma API é comum usar um debouce! Facilita muito o trabalho e da um resultado bem legal. Existem algumas Libs que para auxiliar na utilização do mesmo mas também é possível criar um Hook especifico para usar no projeto. Vídeo top demais, parabéns!
Já passei por isso kkk e eu via o problema mas não sabia resolver!! Vc é top!
Ótima dica que serve para muitas situações
Ah, kkkk amanhã mesmo já vou arrumar o filtro que eu fiz na empresa kkkkkkkkkkkk. Obg pelo vídeo.
Dica muito TOP e útil 👏👏
Muitas vezes dentro do componente existem vários outros estados que quando mudados forçarão o reprocessamento da variável que utiliza o filter, para evitar isso é possível utilizar o hook useMemo e declarar quais são as dependências de estado para determinado processamento.
Boa observação. Quando o valor da variável exige uma certa complexidade no processamento e o componente possui outros estados e/ou props que forçarão a renderização, talvez seja mais indicado utilizar o useMemo para evitar processamentos desnecessários.
Justamente o que havia comentado, acho que ele deveria ter citado isso, pq muitos iniciantes vão tacar filter/map/reduce em componentes com vários states sem fazer memoização.
Já caí e nem sabia que tinha caído, salvou demais hein Diegão
Cara muito bom! Dicas incriveis \0/
Que vídeo top, amanhã mesmo já vou dar aquela revisada no projeto da firma 🚀
Tudo que vc falou estava fazendo até agora KKK muito bom o vídeo.
Cai nessa semana passada com RN kkkkkk Valeu pela dica Diego!! Vou refatorar meu codigo.
Bom demais , que conteúdo irado
Muito massa... vou usar esse tips showw 👏👏
Não já fiz, como pra mim era o melhor jeito de se fazer kkkkkk valeu Diego, ótimo vídeo!
Super interessante! Quando eu estava aprendendo React na época, eu criei uma função que fazia uma cópia do Array salvo no estado pra fazer os filtros a partir dessa cópia, o retorno dela funcionava como a variável criada no vídeo
Que top! Estudei hoje exatamente esse assunto, na documentação nova do React
Caramba Diegão que Cam é essa hein? Deus benza 🙏🙏
Recomendação de vídeo: Poderia fazer um vídeo sobre responsividade no tailwindcss
Massa, massa, massa, massa, muito massa. Brigadão Diego. Já cometi mesmo esse lapso, se é que podemos considerar isso um erro néh.😅
Muito bom Diego. Parabens por compartilhar seu conhecimento conosco.
Parabéns pelo video man! Fiquei incomodado com o tanto de render que o react fazia. Comecei agora a estudar, mas que bom que podemos usar o js/ts pra resolver esses problemas, achei que realmente era necessário renderizar.
Top D+ Diego e já devo ter caio nessas pegadinhas hehehe, mas com react native
Realmente, erro muito comum, eu já passei e passo por isso até hoje. Acho que seria interessante também a implementação de um debounceTime no momento da filtragem dos repositórios. Evitaria mais ainda a renderização, ou pelo menos a atualização da lista renderizada na tela. Excelente video Diego!
Claro, tem muita coisa que pode ser melhor no código, o ponto era focar no estado derivado mesmo 😊 Obrigado pelo comentário!
Hey. Seriously. Thank you. I just downloaded soft and I can CLEARLY see why your vid was recomnded. You're an aweso intro into
Já fiz muito isso! Vlw pelo video!!
faço direto 😅fazia direto! Conteudo top demais
Muito bom o vídeo, seria interessante ressaltar que sempre que um state é atualizado, o componente é recriado. Ou seja sempre que o cara digitar no campo fazendo a alteraçao no state (search) o componente é recriado do zero, e aí a variavel que ta recebendo o filtro da lista também é recriada.
Total! Mas isso nem sempre é um problema, recriar a variável é extremamente rápido, às vezes até mais rápido do que comparar o valor dela com o seu anterior para criar algum tipo de memoização.
Gênio 🤯!
Eu nunca tinha pensado nisso
Vi isso acontecer na prática hoje. Deve ser mais comum do que se pensa! 👏Ótimo conteúdo.
Faz um vídeo usando o tema Plastic!
Fala Diego! Dica fantastática, esse tipo de conteúdo é muito valioso para todos nós, muito obrigado pela sua dedicação em compartilhar conosco! Grande abranço.
Still working as of today, ty!
WTF Man roubaram minha conta e tão fazendo comentários em inglês
Passo por isso todos os dias.. nem preciso olhar o código novamente pra confirmar.. é uma loucura só kkkkkk Excelente conteúdo
Fala Diegao! Um tema do vscode q já uso tem muitos anos é o Fantastic, dentro desse tema existe vários outros temas, eu uso mais a verdade material do Fantastic, mas todas as opções dele são fantásticas!