{"componentChunkName":"component---src-templates-blog-post-js","path":"/4-razoes-para-voce-utilizar-styled-components/","result":{"data":{"markdownRemark":{"fields":{"slug":"/4-razoes-para-voce-utilizar-styled-components/"},"frontmatter":{"titulo":"4 Razões para você utilizar styled components","data":"05/06/2020","tag":"ReactJs","image":{"childImageSharp":{"fluid":{"src":"/static/f64deaf2a8c614413858bf7e7748b442/30492/styledcapa.png","base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB2klEQVQoz6WRy27TUBCGz7MgIUUiDSS2c7MdH1/iW5ykxnKVuFJDiihdFAn2CFBrNdCSVm1VCZa8BM+FWFe/GduJCgU2sPg0RzPz/zOaw2oN5TuREfhPco9vrC5p2SOxh7vUpRztN37pWXGr0TImtHT8iVz8UFDRWJmszdZ1sU2xzVFv8vK9yrNm10SO1CljS7aKt2YEcPwIMveg90fomQG4NSr7OgZqogGx6cDTN8mIk7bUsbZiI6ejOmgpfYjUvEE3Saa7+HTxGenRCU6Pz3Bxcon9/ZeoVCXcqzSwHZm4PpjD5WNUNoRiSO7BZM0ttmjRhJ4+wNZkjlGYYJLsYmdnD3vPXiBJnuLJ7DnirRniyQyWG+Ng3kf6agRZdSF1DRQ+BMtNVMOFqkwRh3McvT3Eh3SJN69TnC+vcHl2jUV6imPa9OPiHIfv3mNJGxt2BKFLOmNQnCePKnkxbo2paOGB8AX3q19hW1PopgdF82G7ISx7DI0aOYlyVO5TfQjdGsKg23KKP8MMO0TfDVAVrlATFjCdTRiESWa6nQ+jtxMW+ZKwrP8F1veizA0e0+9uoyEO4AY0wIsKbH+Fd8s6v+65Q8a8YXxj+5OMWzO05RDOICbTf4IWi29+AGVgksZdivnQAAAAAElFTkSuQmCC","aspectRatio":1.7578125,"srcSet":"/static/f64deaf2a8c614413858bf7e7748b442/7e7e9/styledcapa.png 225w,\n/static/f64deaf2a8c614413858bf7e7748b442/62b1f/styledcapa.png 450w,\n/static/f64deaf2a8c614413858bf7e7748b442/30492/styledcapa.png 670w","sizes":"(max-width: 670px) 100vw, 670px"}}}},"html":"<p>Falaa Galeraaa! Antes de irmos para o assunto principal desse artigo, vamos ouvir juntos <a href=\"https://www.youtube.com/watch?v=QuRauC_JqY0&#x26;list=RDQuRauC_JqY0&#x26;start_radio=1\">Rosa de Saron - O Sol da Meia Noite</a>.</p>\n<p>Quando eu estava pensando em desenvolver esse blog, eu pensei...</p>\n<blockquote>\n<p>Eis a questão... Vou utilizar algum framework front-end tipo <a href=\"https://getbootstrap.com/\">bootstrap</a>, <a href=\"https://materializecss.com/\">materialize</a> ou fazer <strong>tudo</strong> do 0 utilizando <a href=\"https://styled-components.com/\">Styled Components</a>?</p>\n</blockquote>\n<p><img src=\"https://media.giphy.com/media/Xa4cgAajpedUXUFoUw/giphy.gif\" alt=\"Perdido gif\"></p>\n<p>Claro que o mais confortável e rápido a se fazer e utilizar um <a href=\"https://pt.wikipedia.org/wiki/Framework\">framework </a>que agiliza todo o processo... Mas estava disposta a desenvolver <strong>tudo do zero</strong> utilizando apenas o Styled Components. E é sobre ele que irei falar hoje, mostrando <strong>4 razões para você utilizar essa lib fantástica</strong>!</p>\n<p><img src=\"https://media.giphy.com/media/JSvgjnJawWYqZJGsVU/giphy.gif\" alt=\"Perdido gif\"></p>\n<h3>O que e o <a href=\"https://styled-components.com/\">Styled Components</a>?</h3>\n<p>O styled components e uma lib que nos permite escrever código css dentro do JS ele nos permitem traduzir a definição dos estilos de nosso aplicativo em <strong>componentes</strong>, em vez de trabalhar em folhas de estilo CSS. Ele e compatível com vários navegadores, fácil de usar, permite que você atualize dinamicamente por meio das props.</p>\n<blockquote>\n<p><em>Co-creator Max Stoiber says:</em></p>\n<p><em>The basic idea of styled-components is to enforce best practices by removing the mapping between styles and components.</em></p>\n</blockquote>\n<p>Vamos para o que interessa: As 4 Razões!</p>\n<h3>1. <a href=\"https://styled-components.com/docs/api#themeprovider\">ThemeProvider</a></h3>\n<p>Uma das principais vantagens é a possibilidade de definir um theme para sua aplicação apenas envolvendo o <strong>ThemeProvider</strong> que consequentemente todos os componentes vão receber as variáveis do theme. <strong>Obs</strong>: Tudo isso e possível graças as <a href=\"https://pt-br.reactjs.org/docs/context.html\">API do React Context</a>!</p>\n<p>como, por exemplo:</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">const</span> theme <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n\tcolor<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n\t\tred<span class=\"token operator\">:</span> <span class=\"token string\">'#ff0000'</span>\n\t<span class=\"token punctuation\">}</span>\n\tfontSize<span class=\"token operator\">:</span><span class=\"token punctuation\">{</span>\n\t\th1<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n\t\t\tfontSize<span class=\"token operator\">:</span> <span class=\"token number\">2</span>rem<span class=\"token punctuation\">;</span>\n\t\t<span class=\"token punctuation\">}</span>\n\t<span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> theme</code></pre></div>\n<p>No index.js</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span> <span class=\"token string\">\"react\"</span>\n<span class=\"token keyword\">import</span> ReactDOM <span class=\"token keyword\">from</span> <span class=\"token string\">\"react-dom\"</span>\n<span class=\"token keyword\">import</span> theme <span class=\"token keyword\">from</span> <span class=\"token string\">\"./config/theme\"</span>\n<span class=\"token keyword\">import</span> App <span class=\"token keyword\">from</span> <span class=\"token string\">\"./App\"</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> ThemeProvider <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"styled-components\"</span>\n\nReactDOM<span class=\"token punctuation\">.</span><span class=\"token function\">render</span><span class=\"token punctuation\">(</span>\n  <span class=\"token operator\">&lt;</span>ThemeProvider<span class=\"token operator\">></span>\n    <span class=\"token operator\">&lt;</span>App <span class=\"token operator\">/</span><span class=\"token operator\">></span>\n  <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>ThemeProvider<span class=\"token operator\">></span><span class=\"token punctuation\">,</span>\n  document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"root\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">)</span></code></pre></div>\n<p>Agora <strong>qualquer</strong> componente estilizado tem acesso ao seu theme!</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">import</span> styled <span class=\"token keyword\">from</span> <span class=\"token string\">\"styled-components\"</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> Container <span class=\"token operator\">=</span> styled<span class=\"token punctuation\">.</span>div<span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">\n  background-color: </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span><span class=\"token parameter\">props</span> <span class=\"token operator\">=></span> props<span class=\"token punctuation\">.</span>theme<span class=\"token punctuation\">.</span>colors<span class=\"token punctuation\">.</span>red<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">;\n</span><span class=\"token template-punctuation string\">`</span></span></code></pre></div>\n<h3>2. Passando atributos</h3>\n<p>Você consegue modificar o que irá renderizar em um componente e passar por parâmetros.</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">import</span> styled <span class=\"token keyword\">from</span> <span class=\"token string\">\"styled-components\"</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> Container <span class=\"token operator\">=</span> styled<span class=\"token punctuation\">.</span>div<span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">\n  background: </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span><span class=\"token parameter\">props</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span>props<span class=\"token punctuation\">.</span>background <span class=\"token operator\">?</span> props<span class=\"token punctuation\">.</span>background <span class=\"token operator\">:</span> <span class=\"token string\">\"#F5F5F5\"</span><span class=\"token punctuation\">)</span><span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">;\n</span><span class=\"token template-punctuation string\">`</span></span></code></pre></div>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span> <span class=\"token string\">\"react\"</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> Container <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"./styles\"</span>\n\n<span class=\"token keyword\">const</span> <span class=\"token function-variable function\">ContainerRed</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token operator\">&lt;</span>Container background<span class=\"token operator\">=</span><span class=\"token string\">\"#fff\"</span><span class=\"token operator\">></span><span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>Container<span class=\"token operator\">></span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> ContainerRed</code></pre></div>\n<h3>3. Referencias de elementos</h3>\n<p>Muito fácil fazer referências de elementos, muito semelhante também com o CSS ou Sass.</p>\n<p>Supondo que um container e você deseja adicionar uma animação do hover, ficaria dessa maneira:</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">import</span> styled <span class=\"token keyword\">from</span> <span class=\"token string\">\"styled-components\"</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> Container <span class=\"token operator\">=</span> styled<span class=\"token punctuation\">.</span>div<span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">\n  background: yellow;\n\n  &amp;:hover {\n    background: red;\n  }\n</span><span class=\"token template-punctuation string\">`</span></span></code></pre></div>\n<h3>4. Estenda componentes com estilo</h3>\n<p>Outra coisa divertida no styled components e que você consegue estender um estilo já criado, assim você não sobrecarrega os componentes como, por exemplo:</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">import</span> styled <span class=\"token keyword\">from</span> <span class=\"token string\">\"styled-components\"</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> Button <span class=\"token operator\">=</span> styled<span class=\"token punctuation\">.</span>div<span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">\n  color: black;\n</span><span class=\"token template-punctuation string\">`</span></span></code></pre></div>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">import</span> styled <span class=\"token keyword\">from</span> <span class=\"token string\">\"styled-components\"</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> Button <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"./stylesDafault\"</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> ButtonCancel <span class=\"token operator\">=</span> <span class=\"token function\">styled</span><span class=\"token punctuation\">(</span>Button<span class=\"token punctuation\">)</span><span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">\n  color: red;\n</span><span class=\"token template-punctuation string\">`</span></span></code></pre></div>\n<p>Existe muitos outros macetes, você consegue ver em detalhes na <a href=\"https://styled-components.com/docs\">documentação</a>.</p>\n<h3>Conclusão</h3>\n<p>O styled components nos fornecem uma maneira prática de trabalhar com os estilos onde você consegue “componentizar” e principalmente reutilizar seus estilos. Se você está na dúvida se deveria usar ou não, eu só digo uma coisa: use, teste e abuse! <strong>Conhecimento nunca e jogado fora</strong>.</p>\n<p>Já utilizou essa incrível lib? Compartilha comigo aqui nos comentários, gostaria muito de saber!</p>\n<p>Até a próxima.</p>\n<p><img src=\"https://media.giphy.com/media/rrLt0FcGrDeBq/giphy.gif\" alt=\"bye gif\"></p>","timeToRead":3}},"pageContext":{"slug":"/4-razoes-para-voce-utilizar-styled-components/","previousPost":{"fields":{"slug":"/descubra-como-nao-desenvolver-com-javascript-6-passos/"},"frontmatter":{"templateKey":"blog-post","data":"11 de Junho de 2020","tag":"Carreira","titulo":"Descubra como não desenvolver com JavaScript em 6 passos","locale":"pt"},"timeToRead":4},"nextPost":{"fields":{"slug":"/como-configurar-dominio-no-netlify-e-godaddy/"},"frontmatter":{"templateKey":"blog-post","data":"28 de Maio de 2020","tag":"assuntos aleatórios","titulo":"Como configurar domínio no netlify e godaddy","locale":"pt"},"timeToRead":2},"locale":"pt"}}}