Create components in this way in React (Composition Pattern)

  Рет қаралды 99,978

Rocketseat

Rocketseat

Жыл бұрын

Within our application, no matter how simple it may be, components can have an absurd number of customizations (which I'll show you in the video). 😂
Whether it's for one or more customizations, the easiest way is to use a composition pattern. I've been using it a lot in my front-end projects with React.
Today, you'll see in practice how to apply this pattern to a notifications widget, following its specific customizations.
Follow Rocketseat on social media:
Twitter: @rocketseat
Facebook: @rocketseat
Instagram: @rocketseat

Пікірлер: 220
@kenjiutaka
@kenjiutaka Жыл бұрын
Não conhecia esse ElementType, ele parece ser mto útil. Uma dica, quando estender as props de um componente, tem um type helper do React chamado ComponentProps. Dá pra extender tantos elementos HTML quanto componentes customizados. Ficaria assim: interface NotificationActionProps extends ComponentProps {} E para custom components: interface SomeComponentProps extends ComponentProps
@Felipe-jf5dx
@Felipe-jf5dx Жыл бұрын
Top dms, não sabia dessa
@skynight0147852369
@skynight0147852369 Жыл бұрын
Dica ótima mano!
@yarapolana
@yarapolana 9 ай бұрын
Boa partilha!!🎉 Sempre fiquei curiosa na differença de HTML… com ComponentProps. Muito bem explicado.
@luisvalgoi6085
@luisvalgoi6085 8 ай бұрын
eu uso o JSX.IntrinsicElements["button"] 😆
@migliorelli
@migliorelli 7 ай бұрын
passei a vida toda usando "interface CustomElementProps extends React.OriginalElementHTMLAttributes {...}"
@lukaslima5873
@lukaslima5873 8 ай бұрын
mt massa que qnd vejo as aula dele parece tudo mt facil, ai qnd coloco em pratica passo hrs quebrando a cabeca kkkkkkkkkkkkkkkkkkkkkkk faz parte do processo!
@TheKlein550
@TheKlein550 Ай бұрын
To me sentindo assim neste exato momento uhjaeuhaeuhae muitas dúvidas.
@BruunoFernandzOFC
@BruunoFernandzOFC 3 күн бұрын
Pra quem tiver interesse em se aprofundar mais, existe um padrão de design no front-end que se chama Atomic Design, é a mesma teoria (em quebrar o componente em componentes menores) mas utilizando padrões de arquitetura mais recomendados no designer atomico (atomos, moleculas, templates, etc...). É mais recomendado quando se tem um design system pronto para o projeto, fica muito mais detalhado na hora de documentar em um storybook por exemplo.
@martygo
@martygo Жыл бұрын
Ja havia visto essa abordagem em uma biblioteca, nunca fui afundo. Muito interessante. Obrigado por compartilhar Rockeseat 🎉.
@Luizimbatera
@Luizimbatera Жыл бұрын
As bibliotecas UI acabam até mesclando essa abordagem com outras patterns, como por exemplo component composition q é passar um componente como props para outro componente
@eualexslim
@eualexslim Жыл бұрын
Esse pattern é lindo demais. O radix e muitas outras libs usam demais! Outro ponto, a utilização desse pattern, de certa forma, não deixa de utilizar o Single Responsability pattern do SOLID, olha só que massa.
@omundoavolta
@omundoavolta Жыл бұрын
Trás mais disso que o pessoal aqui de produto ama ❤
@raulrozza
@raulrozza Жыл бұрын
Esse é um bom pattern, com certeza! Mas no caso de actions ali, pra respeitar o Open-Closed eu costumo receber um vetor como props e renderizar sob demanda, deixando a responsabilidade de definir a ação pro componente que chama o componente filho. Por exemplo: type Actions = Array void }>
@leandrosoares6
@leandrosoares6 Жыл бұрын
Pattern sensacional. Muito obrigado por partilhar!
@leandro40141
@leandro40141 Жыл бұрын
Como eu estava esperando por um esse conteúdo diegão, top demais
@matheussunderhus
@matheussunderhus Жыл бұрын
isso somado a Context API faz você entregar projetos num outro nível! Ótima aula !!!! É nessas horas que você entende o porque existem Padrões de projeto e se você acha que no front-end não da para implementar coisas do tipo você estava enganado. Muito show ver mais conteúdo com patterns no frontend 🚀
@joao-ys4go
@joao-ys4go Жыл бұрын
Muito obrigado por trazer conteúdos de extrema qualidade como este. Tem me ajudado muito nos estudos
@MatheusSouza-mj6ok
@MatheusSouza-mj6ok Жыл бұрын
Muito foda Diegão, conteúdo solícito e claro.
@FabricioAlexanderDC
@FabricioAlexanderDC Жыл бұрын
incrivel!! eu tinha feito ontem sobre esse projeto so em tailwing e logo hoje ja sair esse video so me da mais motivo para estudo sobre o assunto, valeeeu Rocketseat!
@Myst3rDoug
@Myst3rDoug 11 ай бұрын
Conteúdo muuuito bom, Diegão!! Não conhecia esse pattern de composição mas já vou levar pro time que trabalho para aplicarmos isso nos nossos projetos.
@pablod3v
@pablod3v Жыл бұрын
Show diegao, conteúdo top, o pattern de composição nos ajuda bastante tanto na manutenção quanto a escabilidade dos componentes.
@samucatnb12
@samucatnb12 5 ай бұрын
esse video ficou perfeito, com ótimo exemplo prático, parabéns.
@samueloliveira4465
@samueloliveira4465 Жыл бұрын
Cara, muito interessante, com toda certeza vou fazer algum projeto e implementar esse Pattern. Diego, você é uma inspiração para eu continuar evoluindo.
@williamroger9375
@williamroger9375 Жыл бұрын
Mano que conteúdo sensacional, adorei essas dicas vou pesquisar um pouco mais sobre esse Pattern.
@BrocchiRodrigo
@BrocchiRodrigo Жыл бұрын
A era disso que vc tava reclamando no Insta outro dia, que estava ficando complexo montar um botão kkk.. Mas de fato, a primeira vez talvez dê mais um pouco de trabalho, mas quando vi isso nos painéis de diálogo do headlessui, deu para notar o quanto simplifica para montar os componentes do front "depois de prontos".
@monstru2457
@monstru2457 Жыл бұрын
Excelente conteúdo, como sempre. Já vai entrar pras minhas boas práticas.
@michelhenrique1313
@michelhenrique1313 11 ай бұрын
Bacana demais. Explicou composition de forma simples e objetiva.
@herbert_Souza
@herbert_Souza 11 ай бұрын
Genial!! Que aula magnífica...
@luizfelipeop
@luizfelipeop Жыл бұрын
Muito bom, tava digitando o comentário e ia falar q o radix utiliza bastante ai você começou a falar, muito massa
@_Cesaum
@_Cesaum Жыл бұрын
Da até vontade de codar mais com essa didática incrível! 🚀
@CarlosEduardo42
@CarlosEduardo42 11 ай бұрын
Nossa. Gostei demais e já abriu horizontes para outros tipos de componentes. Inputs, formulários, tabelas... Show de bola!
@me.dwesley
@me.dwesley Жыл бұрын
Muito bom, pretendo utilizar esse pattern em muitos dos meus projetos
@Luccas_Alves
@Luccas_Alves Жыл бұрын
Comecei o ano apenas sabendo muita coisa sobre conceitos de programação, principalmente no que tange backend. Eu estou quase terminando meu curso de SI (é, quase nada de front é ensinado em SI, apesar de ser meu foco). E agora, depois de muito estudar a junção de Tailwind, tsx, react, Next e um tanto de mongodb, estou conseguindo ver esses vídeos sem uma dúvida sequer. Agregou mt! Vlw!
@GusDev0258
@GusDev0258 Жыл бұрын
Muito top Diegão!
@pedroneto1768
@pedroneto1768 Жыл бұрын
Boa dica! Obrigado pelo compartilhamento
@JonatasBuenodoLivramento
@JonatasBuenodoLivramento 11 ай бұрын
Muito bom, esse pattern salva vidas !!!
@verttt_
@verttt_ 11 ай бұрын
Que conteúdo delicioso de ser consumido!
@guilhermedossantossouzajun1249
@guilhermedossantossouzajun1249 Жыл бұрын
Muito bom, Diego é muito ligeiro e preciso isso é muito bom para quem já tem experiência em programação e não precisa ir tão devagar!
@Black_void375
@Black_void375 11 ай бұрын
Nossa... todo dia é dia de escola, ótimo essa dica. Vou testar em algum projeto com certeza! Thanks
@ThugLifeModafocah
@ThugLifeModafocah Жыл бұрын
Conteudo muito foda mano. Obrigado.
@mateusdev9605
@mateusdev9605 11 ай бұрын
Diego sempre mandando muito bem, o cara é foda
@ThugLifeModafocah
@ThugLifeModafocah 6 ай бұрын
voltando aqui pra dizer que esse video, em portugues, é muito melhor que muitos e muitos videos sobre o tema no youtube, em portugues ou ingles. Baita video foda.
@KevinMadalossoVeiga
@KevinMadalossoVeiga 10 ай бұрын
muito bom esse pattern, excelente vídeo Diego
@DarkMetinn2
@DarkMetinn2 Жыл бұрын
Outro ponto legal desse pattern é que podemos definir os possíveis tipos de children desses componentes e garantir que nada vai quebrar, seja em implementação ou estilo. No caso a sempre aceitaria um ou mais componentes do tipo Notification.Action.
@doug8590
@doug8590 11 ай бұрын
Hum interessante, entaoo tipo children inves de ser reactnode seria um array de notification.action nem ?
@pierreMoota
@pierreMoota 10 ай бұрын
Teria um exemplo disso?
@guilhermerillei
@guilhermerillei 9 ай бұрын
Diego, você é o cara mais foda que eu não conheço!
@wltech3460
@wltech3460 11 ай бұрын
muito da hora diego, parabéns pelo conteúdo 👏
@renanfneves
@renanfneves Жыл бұрын
Ótimo conteúdo Diego! Seria muito bom ter mais desse conteúdo sobre design patterns para projetos FE.
@Leandro_B
@Leandro_B 10 ай бұрын
Vlw pelos dica no final, eu tava mesmo procurando algo como o Radix
@diegoveigass
@diegoveigass Жыл бұрын
Toppp xará, vou aplicar nos meus projetos 👊🏼
Жыл бұрын
Muito boa explicação. Valeu!
@maiquelleites2893
@maiquelleites2893 Жыл бұрын
muito bom....vou imlementar nos projetos agora muito massa...
@eugeniorosario4509
@eugeniorosario4509 7 ай бұрын
Muito top cara, Obrigado por compartilhar
@__maiquinho
@__maiquinho 11 ай бұрын
Sensacional Diego! 🚀
@diegomiyt
@diegomiyt Жыл бұрын
Mto bom! Eu to na vibe de focar em responsabilidade unica das coisas a acabo fazendo parecido. Por mais que pra mim fica lindo kkkkkkkkkk sinto mta dificuldade de aceitação pelos demais devs mesmo ficando bom (mtos ainda amam o allinone)( msm atendendo a necessidade de mtas possibilidades para uma mesma 'funcao/componente/etc'.
@douglasvulcano4354
@douglasvulcano4354 9 ай бұрын
Cara, baita conteúdo!
@danielalmeida9609
@danielalmeida9609 Жыл бұрын
Você é foda Diego 💜
@victorbadaro
@victorbadaro 6 ай бұрын
que vídeo satisfatório! 😌
@PauloSilva-el5eq
@PauloSilva-el5eq 11 ай бұрын
Sensacional Diego 🚀
@lucasreact3113
@lucasreact3113 9 ай бұрын
Muito interessante essa forma de criar componentes!!!
@eduardobertozi8506
@eduardobertozi8506 10 ай бұрын
Muito bom! Isso vai ajudar muito.
@ronaldtomaz8155
@ronaldtomaz8155 11 ай бұрын
Conteúdo top demais, criando componentes dessa forma traz mais flexibilidade e facilita a manutenção. Será que vou usar isso pra tudo ? rsss
@gabrielsena2558
@gabrielsena2558 Жыл бұрын
Melhor thumbnail da Rocket
@marcelocerdelo
@marcelocerdelo Жыл бұрын
Muito bom. Valeu!!!
@CarlosEduardo42
@CarlosEduardo42 11 ай бұрын
Acho uma boa a Rocketseat trazer mais conteúdos relacionados ao NextJS. Por exemplo, depois dos Server Components, há uma nova forma de trabalhar com contextos? E qual a melhor forma de proteger rotas de uma aplicação? Seria utilizando o middleware ou tem algo melhor?
@Guilherme-yd8zd
@Guilherme-yd8zd 9 ай бұрын
Muito interessante!
@caironm6737
@caironm6737 11 ай бұрын
Melhor vídeo
@walterivulo8879
@walterivulo8879 Жыл бұрын
Muito interessante 🙏🏾
@reacaosistemas5746
@reacaosistemas5746 Жыл бұрын
Top o conteúdo Diegão. Gostaria de conteúdo sobre chamadas de vídeo e áudio com react native.
@DenisioRodrigues
@DenisioRodrigues Жыл бұрын
Muito bom!
@caiov.rodrigues1788
@caiov.rodrigues1788 5 ай бұрын
Grato!
@tonashiro
@tonashiro Жыл бұрын
Muito boa essa pattern. Estou criando uma biblioteca de componentes no projeto que trabalho atualmente, porém, não estamos utilizando tailwind e sim styled-components. Nesse caso, como cada composição vai precisar da sua estilização, basta criar uma pasta para cada um onde vamos ter pra cada pasta(composição ) os arquivos .types, .styles e o index? Obrigado pela aula, Diego!!
@WNFelix
@WNFelix 11 ай бұрын
Legal pra caramba, eu ainda não tinha visto esse tipo de abordagem em componetização, vou começar a utilizar, estava fazendo tudo via props😂
@vitvitvitvitvitvitvitvit
@vitvitvitvitvitvitvitvit 11 ай бұрын
sofrimento ne
@wandersonalwes2428
@wandersonalwes2428 Жыл бұрын
Incrível 🎉🎉🎉
@lucasmatos8239
@lucasmatos8239 Жыл бұрын
Explica um pouquinho sobre esse ...rest em algum vídeo! Obrigado pela ótima aula!
@meguinha8103
@meguinha8103 3 ай бұрын
mt legal esse componente elementtype
@PatsFerrer
@PatsFerrer 4 ай бұрын
Que massaaaa
@rockNbrain
@rockNbrain Жыл бұрын
show de bola Diegão .. vídeo top ... fora que esse partern está mto presente agt na forma de compor as UIs no next13 com a app router, considerando ter aquela diretiva 'use client' a se considerar e tals ... vlwwwww
@luancordeiro2914
@luancordeiro2914 10 ай бұрын
muito bom, vou testar.
@Rolgab
@Rolgab 11 ай бұрын
Teu teclado tão barulhento que me desconcentrou 😂 Edit: terminei o vídeo agr. 😅 muito poderoso esse pattern. Já tinha visto e usado antes mas tu executou muito bem no vídeo, muito legal ver o resultado!
@paulinha-19
@paulinha-19 10 ай бұрын
surreal de bom. esse pattern facilita muito como eu não sabia disso?
@sinhuu.s2
@sinhuu.s2 11 ай бұрын
Gosto muito de usar o design atoms por conta disso também Diegao
@gabryelfhsoares
@gabryelfhsoares Жыл бұрын
Top demais
@pablonicholassantos431
@pablonicholassantos431 4 ай бұрын
o bom dos vídeos do Diego é que eu acelero no máximo pra 1.25x, ele já fala no modo 2x hahahha sem falar na qualidade do conteúdo (:
@fnandesrafael
@fnandesrafael 11 ай бұрын
tenho apenas duas palavras pra esse design pattern: DO CARALHO.
@luizlahr
@luizlahr 11 ай бұрын
Diego, mais uma vez um excelente conteudo. Uma curiosidade, Você ve alguma vantagem em utilizar o children declarando direto nas props como ReactNode ao invés de utilizar o PropsWithChildren? Ou é mais costume?
@gfbengel
@gfbengel Жыл бұрын
cara muito bom criar varios videos usando o mesmo projeto.. parece quase um "minicurso" distribuido por varios assuntos que podem ser mostrados não necessariamente relacionados em serie pq cada video funciona sozinho, mas que o exemplo mostrado encaixe em outros videos. por exemplo fazer um prox video focado em formatar datas com alguma lib e usar esse proj pra atualizar só o texto q ta no conteúdo q mostra a data da notificação. pra quem for ver, nao importa o projeto em si. pq é só um exemplo. mas quem ve o "grupo" dos videos desse projeto encaixa e da oturas perspectivas.
@gfbengel
@gfbengel Жыл бұрын
outro video que seria muito bom nesse sentido seria um focado em variants de botões com o tailwind pra na hora de colocar o action button ali passar apenas a cor e não as classes em si
@principe.borodin
@principe.borodin Жыл бұрын
Fantastico. Eu nao tinha visto essa parte desse jeito. Eu normalmente usaria uma factory com React.createElement
@marceloviannadev
@marceloviannadev 6 ай бұрын
Pra ficar ainda melhor e menos verboso, você pode criar variações para cada componente filho que compõem o pai e passar de forma obrigatória ou opcional ou fazendo na mão (como eu gosto ou utilizando Tailwind variants por ex...) e restringir ainda mais a identidade visual de cada filho com todas as suas variações. Similar ao que libs fazem quando ao utilizar o componente filho por exemplo de ícone você declara via pros: size=sm color=purple icon=(já pode vir as opções de dentro e você só diz se é ícone y ou z) e tudo fica sempre concentrado dentro de cada filho não afetando o código final do pai, mantendo clean code, menos verbosidade e se utilizar técnicas como a do storybook por exemplo, cada componente seu pode ter um readme ensinando a usá-lo, descrevendo etc... e também, a tipagem do componente pode ser externa, os hooks e etc... sem falar em testcases já deixando o componente com diferentes useCases testados e aprovados... as possibilidades são infinitas e quanto mais você se aprofundar e entende isto, mais organizado e direto fica a leitura pra qualquer um que bater o olho já entender o que tá rolando... e pra fazer refactory, mudanças ou manutenções, fica delícia! 🤘🏻
@MrLOPIU22
@MrLOPIU22 Жыл бұрын
Muuuito top
@Lcsglife3279
@Lcsglife3279 11 ай бұрын
Top em
@matheusfd3
@matheusfd3 9 ай бұрын
Cara, acho incrivel. O que eu fico incredulo é como eu vou saber que eu precisaria de outra biblioteca para fazer um tal de merge nas classes, como ele chega a essa conclusão e sabe da existencia de uma biblioteca pra isso? é esse nivel que eu quero chegar.
@AmodeusR
@AmodeusR 9 ай бұрын
É simples, você não vai saber, a não ser que já saiba, é claro kkk Isso é coisa de você experimentar um problema e pesquisar soluções na internet, imaginando que outras pessoas já passaram pelo mesmo e até criaram uma solução, acabar ouvindo por outros assim como você ouviu do Diego nessa aula e agora sabe da existência dessa biblioteca, ou até de você mesmo criar a solução caso seja capaz e divulgá-la na internet. Não existe nenhuma magia ou ação do sobrenatural aqui, como é algo que depende da exposição e da ciência da existência de tais coisas, é algo que você simplesmente desenvolve quanto mais você está em contato com a área.
@daniellevi745
@daniellevi745 Жыл бұрын
Top de mais
@maicongabriel5607
@maicongabriel5607 Жыл бұрын
Muito bom
@junqueiratec
@junqueiratec Жыл бұрын
@Diego tudo bem, da moral primereact e muito completo uso em todas apps e faz vídeo dele.
@droom5259
@droom5259 10 ай бұрын
Que lindo
@hamiceispereira3825
@hamiceispereira3825 Жыл бұрын
Muito top
4 ай бұрын
Atomic design tem essa pegada, vc coda mais, mas o resultado final é muito "libertador" em relação a criação de componentes.
@emersonbarros6815
@emersonbarros6815 11 ай бұрын
Senti um ppuco de falta de um html mais semântico, fira isso otima demonstração do design pattern
@denilsoncosta9837
@denilsoncosta9837 Жыл бұрын
A biblioteca shadcn ui, tem a mesma abordagem na forma de construção de componentes. Vou fazer alguns experimentos com esse pattern para ver se em termos de DX e tempo de execução, ele viável. Gostei muito do conteúdo.
@douglastrindadev
@douglastrindadev Ай бұрын
shadcn usa o radix
@alberto3641
@alberto3641 Жыл бұрын
Ver essa aula é saber/descobrir que o MaterialUI trabalha com outro pattern: o prop hell kkkkkkkkkkkkkkk
@arozendojr
@arozendojr 11 ай бұрын
bem legal
@LordGhapa
@LordGhapa 9 ай бұрын
sou apenas um júnior acabei ficando surpreso pois eu estava fazendo algo semelhante com styledComponent o que é deveras complexo e tudo ficava no style.ts fica styled.wrapper styled.button etc..., separa cada parte em um arquivo diferente facilita bem mais o entendimento, so fico um pouco assustado com a quantidade absurda de arquivos que um projeto real pode chegar a ter mas acho que é so questão de costume
@gustavoleite7569
@gustavoleite7569 Жыл бұрын
até o min 8:21: Eu utilizaria os próprios metodos onNomeDaAcao pra saber se aquele component tem ou não aquela ação, não um hasAction ou actionType
@joaobibiano
@joaobibiano Жыл бұрын
Recomendo também a boa e velha clsx library para merge de css classes
@faviomagallanes
@faviomagallanes Жыл бұрын
muchas gracias
@lucasfernandes9381
@lucasfernandes9381 Жыл бұрын
Gostei desse formato de vídeo aula. Os vídeos ao vivo também são bons, mas dispersam muito por causa do chat.
O ERRO mais comum no React (você já fez isso)
13:26
Rocketseat
Рет қаралды 119 М.
Documentando seu front-end com Storybook (projeto real)
29:09
Rocketseat
Рет қаралды 68 М.
Дибала против вратаря Легенды
00:33
Mr. Oleynik
Рет қаралды 3,3 МЛН
Stupid Barry Find Mellstroy in Escape From Prison Challenge
00:29
Garri Creative
Рет қаралды 21 МЛН
Why You Should Always Help Others ❤️
00:40
Alan Chikin Chow
Рет қаралды 137 МЛН
ROCK PAPER SCISSOR! (55 MLN SUBS!) feat @PANDAGIRLOFFICIAL #shorts
00:31
o Pior Programador que conheço
17:52
Lucas Montano
Рет қаралды 32 М.
10 React Antipatterns to Avoid - Code This, Not That!
8:55
Fireship
Рет қаралды 719 М.
The Truth about Rust/WebAssembly Performance
29:47
Greg Johnston
Рет қаралды 173 М.
Everything You Need to Know About React 19
21:42
CoderOne
Рет қаралды 14 М.
Esse PATTERN do React pode te salvar (+ lib secreta)
12:33
Rocketseat
Рет қаралды 22 М.
Explorando useState no React (conceito e importância)
5:11
Rocketseat
Рет қаралды 7 М.
Unveiling CSS Grid in practice | Mayk Brito
36:17
Rocketseat
Рет қаралды 371 М.
Дибала против вратаря Легенды
00:33
Mr. Oleynik
Рет қаралды 3,3 МЛН