Movatterモバイル変換


[0]ホーム

URL:


Skip to content
DEV Community
Log in Create account

DEV Community

Dante J. Anjos
Dante J. Anjos

Posted on • Edited on

     

Componente Snackbar com React do zero

Componentes snackbar são aqueles alertas flutuantes com informações importantes, ex: mensagens de erro, alertas, sucesso etc.
Utilizando React podemos criar um snackbar de forma bem simples.

Vamos ao código

Na raiz do projeto crie uma pasta chamadacomponents e dentro desta, uma outra chamadaSnackbar.

Dentro da pastaSnackbar crie os arquivosindex.js estyles.css.

No arquivo index vamos criar um functional component com o JSX inicial do nosso snackbar.

importReactfrom"react";import"./styles.css";exportdefaultfunctionSnackbar(){return(<divclassName="snackbar visible success"><span>Lorem ipsum dolor sit amet</span><buttonclassName="close">x</button></div>);}
Enter fullscreen modeExit fullscreen mode

Vamos adicionar alguns estilos para deixar nosso snackbar bonitão quando ele aparecer na tela.

.snackbar{background-color:#333;position:fixed;bottom:0;left:50%;width:400px;margin-left:-200px;opacity:0;visibility:hidden;color:#fff;padding:16px;border-radius:4px;display:flex;justify-content:space-between;align-items:center;transition:all200msease-in-out;}.snackbar.close{font-size:18px;cursor:pointer;transition:200ms;padding:0;border:0;background-color:transparent;color:#fff;}
Enter fullscreen modeExit fullscreen mode

Vamos adicionar algumas propriedades para nosso componente e começar a trabalhar na lógica de exibir e ocultar.

functionSnackbar({type,open,children,onClose}){return(<divclassName={`snackbar${open&&"visible"}${type}`}><span>{children}</span><buttonclassName="close"onClick={onClose}>&times;</button></div>);}
Enter fullscreen modeExit fullscreen mode

Note as propsopen etype, essas serão essencialmente usadas para adicionar os estilos principais da snackbar e também exibir e ocultar.

className={`snackbar${open&&"visible"}${type}`}
Enter fullscreen modeExit fullscreen mode

Quando a propopen fortrue a classe.visible será adicionada ao componente. Então basta adicionar visibilidade ao componente via CSS.

.snackbar.visible{opacity:1;bottom:20px;visibility:visible;}
Enter fullscreen modeExit fullscreen mode

a proptype receberá valores como success, error, warning e info. Podemos usar cada um desses valores para adicionar uma cor diferente ao snackbar.

.snackbar.success{background-color:rgb(0,158,0);}.snackbar.info{background-color:rgb(86,83,255);}.snackbar.warning{background-color:rgb(255,181,44);}.snackbar.error{background-color:rgb(219,55,55);}
Enter fullscreen modeExit fullscreen mode

Obs: Para lidar com o bind dinâmico de classes poderíamos usar uma lib comoclassnames, mas como se trata de uma lógica bem simples, vamos fazer isso sem lib mesmo.

Toques finais

Apesar de ser um componente pequeno (400px). Para garantir a boa visualização em telas pequenas, vamos fazer um pequeno ajuste usando@media querie.

@media(max-width:480px){.snackbar{width:100%;margin-left:0;left:0;border-radius:4px4px00;}.snackbar.visible{bottom:0;}}
Enter fullscreen modeExit fullscreen mode

Agora sim, nosso componente está pronto para uso.

<Snackbartype="success"open={someStateOpen}onClose={()=>setSomeStateOpen(false)}>  Que snackbar massa e fácil de usar =)</Snackbar>
Enter fullscreen modeExit fullscreen mode

Acessea demo no codesandbox para conferir o código completo e exemplo de uso.

Top comments(0)

Subscribe
pic
Create template

Templates let you quickly answer FAQs or store snippets for re-use.

Dismiss

Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment'spermalink.

For further actions, you may consider blocking this person and/orreporting abuse

I love share my knowledge with the community.I'm a full-stack web developer focused on front-end technologies.Frontend Lover <3 :)
  • Location
    Brazil
  • Work
    Software Engineer at Globo
  • Joined

More fromDante J. Anjos

DEV Community

We're a place where coders share, stay up-to-date and grow their careers.

Log in Create account

[8]ページ先頭

©2009-2025 Movatter.jp