<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Cristiano Gonçalves ⛩️</title>
    <description>The latest articles on DEV Community by Cristiano Gonçalves ⛩️ (@gonkristiano).</description>
    <link>https://dev.to/gonkristiano</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F139784%2F7797082d-1258-4e80-b0d6-ea8c2c5ea915.jpg</url>
      <title>DEV Community: Cristiano Gonçalves ⛩️</title>
      <link>https://dev.to/gonkristiano</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gonkristiano"/>
    <language>en</language>
    <item>
      <title>Entendendo renderização no browser: Como o DOM é gerado?</title>
      <dc:creator>Cristiano Gonçalves ⛩️</dc:creator>
      <pubDate>Sun, 10 Nov 2024 18:11:19 +0000</pubDate>
      <link>https://dev.to/gonkristiano/como-o-navegador-entende-o-html-2jo5</link>
      <guid>https://dev.to/gonkristiano/como-o-navegador-entende-o-html-2jo5</guid>
      <description>&lt;p&gt;Nos artigos anteriores nós aprendemos sobre o DOM e sobre o CSSOM, se você ainda tem dúvidas sobre essas duas palavrinhas recomendo fazer a leitura dos dois posts abaixo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/gonkristiano/entendendo-renderizacao-no-browser-dom-4if4"&gt;Entendendo renderização no browser: DOM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/gonkristiano/entendendo-renderizacao-no-browser-cssom-4f74"&gt;Entendendo renderização no browser: CSSOM&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Recapitulando, o DOM é uma estrutura que o navegador utiliza para renderizar a nossa página. Porém, os dados da internet não são trafegados em forma de DOM, logo precisa existir um processo antes do DOM ficar pronto para o navegador consumir.&lt;/p&gt;

&lt;p&gt;Nesse momento você pode estar se perguntando como os dados trafegam na internet? &lt;/p&gt;

&lt;p&gt;Sempre que acessamos um site acontece uma troca em um padrão que chamamos de cliente x servidor. &lt;/p&gt;

&lt;p&gt;Nessa troca o cliente (seu navegador) pede para acessar o site &lt;code&gt;www.cristiano.dev&lt;/code&gt; para o servidor, que respondem com todo o conteúdo do site solicitado, mas esse conteúdo vem em forma de bytes e de uma forma que está distante do html/css/js que conhecemos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkiylech07690494hx9nq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkiylech07690494hx9nq.png" alt="Modelo cliente x servidor" width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O que o browser vai receber do servidor é uma sequência de bytes.&lt;/p&gt;

&lt;p&gt;Para esse pequeno trecho de html disponibilizado pelo servidor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!doctype html&amp;gt;
&amp;lt;html&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;Um título&amp;lt;/title&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;a href="#"&amp;gt;Um link&amp;lt;/a&amp;gt;
    &amp;lt;h1&amp;gt;Um cabeçalho&amp;lt;/h1&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O navegador receberia em bytes mais ou menos assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;3C21646F63747970652068746D6C3E0A3C68746D6C3E0A20203C686561643E0A202020203C7469746C653E556D2074C3AD74756C6F3C2F7469746C653E0A20203C2F686561643E0A20203C626F64793E0A202020203C6120687265663D2223223E556D206C696E6B3C2F613E0A202020203C68313E556D2063616265C3A7616C686F3C2F68313E0A20203C2F626F64793E0A3C2F68746D6C3E
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Porém, o navegador não consegue renderizar uma página apenas com essa informação. Para que o nosso layout seja montado, o navegador vai executar alguns passos antes de ter o DOM.&lt;/p&gt;

&lt;p&gt;Esses passo são:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Conversão&lt;/li&gt;
&lt;li&gt;Tokenização&lt;/li&gt;
&lt;li&gt;Lexing&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conversão: Bytes para caracteres
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi2g8hastzudtf2q4xlvg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi2g8hastzudtf2q4xlvg.png" alt="Bytes para caracteres" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nessa etapa o navegador lê os dados brutos da rede ou de um disco e os converte para caracteres com base na codificação(encoding) especificada no arquivo, por exemplo, UTF-8.&lt;/p&gt;

&lt;p&gt;Basicamente é a etapa em que o navegador transforma bytes para o código no formato que escrevemos no nosso dia a dia.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tokenização: Caracteres para tokens
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffq2g0083ifmjqxx542bv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffq2g0083ifmjqxx542bv.png" alt="Caracteres para tokens" width="800" height="252"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nessa etapa o navegador converte strings de caracteres em pequenas unidades chamadas tokens. Todo início, final de tag e conteúdo são contabilizados, além disso, cada token possui um conjunto de regras específicos.&lt;/p&gt;

&lt;p&gt;Por exemplo, a tag &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; possui atributos diferentes da tag &lt;code&gt;&amp;lt;strong&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Sem essa etapa teremos apenas um monte de texto sem significado para o navegador e no fim desse processo o nosso html base seria tokenizado assim:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;!doctype html&amp;gt;&lt;/code&gt; ➔ &lt;strong&gt;Token&lt;/strong&gt;: &lt;code&gt;DOCTYPE&lt;/code&gt;, &lt;strong&gt;Valor&lt;/strong&gt;: &lt;code&gt;html&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt; ➔ &lt;strong&gt;Token&lt;/strong&gt;: &lt;code&gt;StartTag&lt;/code&gt;, &lt;strong&gt;Nome&lt;/strong&gt;: &lt;code&gt;html&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; ➔ &lt;strong&gt;Token&lt;/strong&gt;: &lt;code&gt;StartTag&lt;/code&gt;, &lt;strong&gt;Nome&lt;/strong&gt;: &lt;code&gt;head&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; ➔ &lt;strong&gt;Token&lt;/strong&gt;: &lt;code&gt;StartTag&lt;/code&gt;, &lt;strong&gt;Nome&lt;/strong&gt;: &lt;code&gt;title&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Exemplo de título&lt;/code&gt; ➔ &lt;strong&gt;Token&lt;/strong&gt;: &lt;code&gt;Character&lt;/code&gt;, &lt;strong&gt;Dados&lt;/strong&gt;: &lt;code&gt;Exemplo de título&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;/title&amp;gt;&lt;/code&gt; ➔ &lt;strong&gt;Token&lt;/strong&gt;: &lt;code&gt;EndTag&lt;/code&gt;, &lt;strong&gt;Nome&lt;/strong&gt;: &lt;code&gt;title&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; ➔ &lt;strong&gt;Token&lt;/strong&gt;: &lt;code&gt;StartTag&lt;/code&gt;, &lt;strong&gt;Nome&lt;/strong&gt;: &lt;code&gt;p&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Olá, mundo!&lt;/code&gt; ➔ &lt;strong&gt;Token&lt;/strong&gt;: &lt;code&gt;Character&lt;/code&gt;, &lt;strong&gt;Dados&lt;/strong&gt;: &lt;code&gt;Olá, mundo!&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;/p&amp;gt;&lt;/code&gt; ➔ &lt;strong&gt;Token&lt;/strong&gt;: &lt;code&gt;EndTag&lt;/code&gt;, &lt;strong&gt;Nome&lt;/strong&gt;: &lt;code&gt;p&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ficbyqucc3bgkafh6x5ip.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ficbyqucc3bgkafh6x5ip.png" alt="Tokenização" width="800" height="201"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Um token é uma palavra ou símbolo individual em um texto. A "tokenização" é o processo de dividir um texto em palavras, frases ou símbolos menores.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Lexing: Tokens para nodes
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr7tyltsqg6ef8wou5xm1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr7tyltsqg6ef8wou5xm1.png" alt="Lexing" width="800" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A etapa de lexing(análise léxica) é responsável por converter os tokens em objetos, mas isso ainda não é o DOM. Nesse momento o navegador está gerando partes isoladas do DOM, onde cada tag será transformada em um objeto com atributos que tragam informações relacionadas a atributos, tags pai, tags filhas, etc.&lt;/p&gt;

&lt;p&gt;O resultado após o lexing da nossa tag &lt;/p&gt;
&lt;p&gt; seria algo assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "type": "Element",
  "tagName": "p",
  "attributes": [],
  "children": [
    {
      "type": "Text",
      "content": "Olá, mundo!"
    }
  ]
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Construção do DOM: Nodes para DOM
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F22gao5w3tg3qyjcg67np.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F22gao5w3tg3qyjcg67np.png" alt="DOM" width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finalmente chegamos na etapa de construção do DOM! &lt;/p&gt;

&lt;p&gt;Nesse momento o navegador vai considerar as relações entre as tags html e vai juntar os nodes em uma estrutura de dados em árvore que represente essas relações de forma hierárquica. Por exemplo: o objeto html é pai do objeto body, o body é pai do objeto paragraph, até que toda a representação do documento seja criada.&lt;/p&gt;

&lt;p&gt;Ao fim da construção o nosso html de exemplo se torna uma árvore de objetos como esta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "type": "Document",
  "children": [
    {
      "type": "Element",
      "tagName": "html",
      "children": [
        {
          "type": "Element",
          "tagName": "head",
          "children": [
            {
              "type": "Element",
              "tagName": "title",
              "children": [
                {
                  "type": "Text",
                  "content": "Exemplo de título"
                }
              ]
            }
          ]
        },
        {
          "type": "Element",
          "tagName": "body",
          "children": [
            {
              "type": "Element",
              "tagName": "p",
              "children": [
                {
                  "type": "Text",
                  "content": "Olá, mundo!"
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Recapitulando
&lt;/h2&gt;

&lt;p&gt;O processo para construção do DOM é complexo e acontece nas seguintes etapas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Conversão: O html é recebido pelo navegador e convertido de bytes para caracteres.&lt;/li&gt;
&lt;li&gt;Tokenização: Os caracteres são transformados em tokens que representam as partes do html (tags, atributos, textos).&lt;/li&gt;
&lt;li&gt;Lexing: Os tokens são organizados em nós de objetos&lt;/li&gt;
&lt;li&gt;DOM: Os objetos são organizados em uma estrutura de dados do tipo árvore de forma hierárquica.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para o CSSOM também acontece um processo semelhante, composto por conversão, tokenização e lexing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusão
&lt;/h3&gt;

&lt;p&gt;Você deve estar se perguntando onde você vai aplicar esse conhecimento ao longo do seu dia a dia desenvolvendo...&lt;/p&gt;

&lt;p&gt;É verdade que esse tipo de informação não vai ser requisitada com frequência, mas é importante entender como os navegadores, a principal ferramenta de trabalho de frontends, funcionam na sua essência. &lt;/p&gt;

&lt;p&gt;Esse conhecimento também vai ser muito valioso para entender os próximos temas que iremos abordar por aqui: Paint, repaint, flow e reflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  Muito obrigado!!
&lt;/h3&gt;

&lt;p&gt;Obrigado por ter chegado até aqui!&lt;/p&gt;

&lt;p&gt;Espero que tenha aprendido algo novo ao longo dessa leitura.&lt;/p&gt;

&lt;p&gt;Até a próxima!&lt;/p&gt;

&lt;h3&gt;
  
  
  Referências
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://web.dev/articles/critical-rendering-path/constructing-the-object-model?hl=pt-br#document_object_model_dom" rel="noopener noreferrer"&gt;Constructing the Object Model&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.matheuscastiglioni.com.br/desconstruindo-a-web-renderizacao-de-paginas/" rel="noopener noreferrer"&gt;Desconstruindo a Web: Renderização De Páginas&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>frontend</category>
      <category>programming</category>
    </item>
    <item>
      <title>Entendendo renderização no browser: CSSOM</title>
      <dc:creator>Cristiano Gonçalves ⛩️</dc:creator>
      <pubDate>Fri, 08 Nov 2024 12:10:01 +0000</pubDate>
      <link>https://dev.to/gonkristiano/entendendo-renderizacao-no-browser-cssom-4f74</link>
      <guid>https://dev.to/gonkristiano/entendendo-renderizacao-no-browser-cssom-4f74</guid>
      <description>&lt;p&gt;Hey, esse artigo faz parte de uma série sobre renderização no browser. Se você ainda não leu os artigos passados, da uma conferida nos links abaixo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.cristiano.dev/blog/2024-09-17-processo-renderizacao-no-browser" rel="noopener noreferrer"&gt;Entendendo renderização no browser: DOM&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No último artigo, exploramos como o HTML é processado pelo navegador através da DOM (Document Object Model), que define a estrutura da página web. Porém, uma página web não é feita apenas de HTML e algo que muitos ainda não sabem é que o CSS também possui sua própria representação em forma de objeto, chamada CSSOM (CSS Object Model).&lt;/p&gt;

&lt;p&gt;O navegador utiliza a CSSOM em conjunto com a DOM para construir a página, combinando estrutura (HTML) e estilos (CSS), resultando em uma apresentação visual harmoniosa.&lt;/p&gt;

&lt;p&gt;Neste artigo, vamos aprofundar nosso conhecimento sobre a CSSOM, entendendo sua estrutura, importância e como ela pode ser manipulada.&lt;/p&gt;

&lt;h3&gt;
  
  
  O que é o CSSOM?
&lt;/h3&gt;

&lt;p&gt;Assim como a DOM, o CSSOM é uma estrutura de dados hierárquica, mas sua função é representar o CSS de um documento web.&lt;/p&gt;

&lt;p&gt;O CSSOM é gerado pelos navegadores após o carregamento e processamento dos arquivos de estilo. Embora seja construído separadamente da DOM, ambos trabalham em conjunto para que o navegador possa montar a página com a estrutura correta (DOM) e aplicar os estilos apropriados (CSSOM).&lt;/p&gt;

&lt;p&gt;A principal função do CSSOM é fornecer ao navegador um "mapa" detalhado dos estilos que devem ser aplicados a cada elemento da página.&lt;/p&gt;

&lt;p&gt;Veja abaixo uma representação visual do CSSOM:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fudw3c957spa3henb3k44.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fudw3c957spa3henb3k44.png" alt="Representação da árvore CSSOM" width="800" height="594"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No código essa representação ficaria assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;16px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;200px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;text-decoration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;h1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bold&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E a árvore DOM referente ao CSSOM que vimos anteriormente é representada da seguinte forma:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fazhb884evrx6wxkm51g3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fazhb884evrx6wxkm51g3.png" alt="Representação da árvore DOM" width="800" height="704"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Manipulando o CSSOM
&lt;/h4&gt;

&lt;p&gt;Os navegadores nos fornecem um conjunto de APIs que permitem a manipulação do CSS utilizando javascript. Ela é semelhante a API do DOM, mas para CSS ao invés de HTML.&lt;/p&gt;

&lt;p&gt;Com o uso dessa API nós conseguimos ler e manipular o CSS de uma página de forma dinâmica.&lt;/p&gt;

&lt;p&gt;A maneira mais simples de você manipular estilos é por meio da propriedade style presente no document.&lt;/p&gt;

&lt;p&gt;Para acessar e manipular um elemento do CSSOM pela primeira vez, abra o console do navegador e execute o seguinte código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;background&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gray&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;background&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// gray&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Após executar o trecho de código acima recomendo que inspecione os elementos da página e analisem o body. Notem que agora o nosso body tem um estilo inline e vai estar mais ou menos dessa forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;body&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"background: gray;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso acontece porque alterar a propriedade style de um elemento só tem efeito para estilos inlines.&lt;br&gt;
A mesma lógica se aplica para leitura de propriedades do style. Se você executar o código abaixo não vai ter nenhum retorno, pois nenhum momento definimos a propriedade color usando estilo inline.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;background&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// '''&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Conseguimos adicionar ou alterar qualquer propriedade CSS da nossa página seguindo sempre o padrão elemento.style.nomeDaProprieda.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Outra forma de manipular os estilos inline são por meio de alguns métodos presentes no style.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;setProperty: com esse método você consegue adicionar ou altera o valor de uma propriedade inline.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;background&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;red&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Agora execute o próximo comando&lt;/span&gt;

&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;background&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;blue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;getPropertyValue: com esse método você consegue acessar o valor de uma propriedade inline.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getPropertyValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;background&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// blue&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;removeProperty: com esse método você consegue remover uma propriedade inline.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;removeProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;background&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;O getComputedStyle funciona apenas para leitura. Você conseguirá acessar a informação sobre estilo de qualquer elemento ou pseudo elemento, mas não conseguirá fazer alterações.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  E os estilos que não são inlines?
&lt;/h4&gt;

&lt;p&gt;Escrever estilos inline não é algo muito comum, por isso também conseguimos acessar os estilos computados, aquele que definimos na nossa folha de estilo. Para isso podemos acessar e manipular diretamente nossa folha de estilos.&lt;/p&gt;

&lt;p&gt;Execute o trecho de código abaixo no console do seu navegador:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;styleSheets&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com ele você vai ter acesso a todas as folhas de estilos declaradas no head do seu html.&lt;/p&gt;

&lt;p&gt;Essas folhas de estilos são retornada em formato de lista(parece, mas não é um array) e você pode acessar por meio do índice.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;styleSheets&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Daqui em diante recomendo executar os testes em outro local, pois esse blog é feito com tailwind css e a manipulação da folha de estilo fica mais complicada.&lt;/p&gt;

&lt;p&gt;Acesse essa &lt;a href="https://crisgon.github.io/30Days30Sites/email/index.html" rel="noopener noreferrer"&gt;página&lt;/a&gt; e execute os comando no console dela.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;styleSheets&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;cssRules&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ao executar o código acima você terá acesso a todos o css presentes na folha de estilo. Seguindo a mesma lógica anterior você pode acessar os elementos por meio de índice.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;styleSheets&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;cssRules&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No código acima eu estou acessando a declaração de estilo do body da página.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;styleSheets&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;cssRules&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;background&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;red&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Acessando a propriedade style conseguimos adicionar ou alterar qualquer propriedade CSS, mas sem escrever estilos inlines.&lt;/p&gt;

&lt;p&gt;Recomendo que brinque um pouco mais com essa api mudando os índices e alterando o CSS de diversos elementos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusão
&lt;/h3&gt;

&lt;p&gt;Assim como o DOM o CSSOM é uma representação em forma de arvore utilizada pelos navegadores para o processo de renderização.&lt;/p&gt;

&lt;p&gt;Podemos acessar todo o CSS da página e manipulá-lo livremente utilizando javascript. Saber executar esse tipo de operação é essencial para compreender ferramentas de CSS como styled componentes, linária etc.&lt;/p&gt;

&lt;p&gt;O conhecimento de base é o mais importante, mas é constantemente negligenciado.&lt;br&gt;
No contexto do desenvolvimento web, conhecer html, css, javascript e como o navegador funciona é essencial. Com essa base sólida, você vai conseguir aprender qualquer tecnologia que derive desses fundamentos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Muito obrigado!!
&lt;/h3&gt;

&lt;p&gt;Obrigado por ter chegado até aqui!&lt;/p&gt;

&lt;p&gt;Espero que tenha aprendido algo novo ao longo dessa leitura.&lt;/p&gt;

&lt;p&gt;Até a próxima!&lt;/p&gt;

&lt;h3&gt;
  
  
  Referências
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/CSS_Object_Model" rel="noopener noreferrer"&gt;CSS Object Model&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://web.dev/articles/critical-rendering-path/constructing-the-object-model?hl=pt-br#document_object_model_dom" rel="noopener noreferrer"&gt;Constructing the Object Model&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://unicorncoder.medium.com/cssom-modelo-de-objeto-css-88ec27adf193#:~:text=O%20que%20%C3%A9%20o%20Modelo%20de%20Objeto%20CSS%20(CSSOM)%3F&amp;amp;text=Assim%20como%20o%20DOM%20permite,CSS%20aplicados%20a%20esses%20elementos." rel="noopener noreferrer"&gt;CSSOM — Modelo de Objeto CSS&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://css-tricks.com/an-introduction-and-guide-to-the-css-object-model-cssom/?ref=dailydev" rel="noopener noreferrer"&gt;An Introduction and Guide to the CSS Object Model (CSSOM)&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>programming</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Entendendo renderização no browser: DOM</title>
      <dc:creator>Cristiano Gonçalves ⛩️</dc:creator>
      <pubDate>Thu, 07 Nov 2024 11:50:18 +0000</pubDate>
      <link>https://dev.to/gonkristiano/entendendo-renderizacao-no-browser-dom-4if4</link>
      <guid>https://dev.to/gonkristiano/entendendo-renderizacao-no-browser-dom-4if4</guid>
      <description>&lt;p&gt;Conhecer bem a ferramenta com a qual trabalhamos é um passo importante para evoluir em nossa carreira. Já imaginou um eletricista que não entenda como a corrente elétrica funciona? E já pensou em um desenvolvedor front-end que não compreenda como os navegadores funcionam? Pois é, isso é algo muito comum. Pouquíssimos desenvolvedores front-end entendem o processo que o navegador segue para montar uma página. E, apesar de ser um processo simples, ele é muito importante e, infelizmente, ignorado.&lt;/p&gt;

&lt;p&gt;Hoje vamos começar uma jornada para entender o processo realizado pelos navegadores cada vez que criamos uma tag HTML, manipulamos algo com JavaScript ou mudamos uma cor com CSS.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é renderização?
&lt;/h2&gt;

&lt;p&gt;Quando construímos uma casa, passamos por diversas etapas. Primeiro, fazemos a fundação, depois construímos as paredes, adicionamos o telhado, fazemos o acabamento (reboco, piso etc.) e, por fim, adicionamos os móveis e eletrodomésticos. A construção de um site segue um processo semelhante. Primeiro, criamos a fundação (HTML), depois adicionamos o acabamento (CSS) e, por fim, a interatividade (JavaScript). Em outras palavras, a renderização é o processo pelo qual o navegador transforma o código em algo visual e interativo para o usuário.&lt;/p&gt;

&lt;h2&gt;
  
  
  O processo de renderização
&lt;/h2&gt;

&lt;p&gt;A renderização de uma página web é um processo complexo, por isso o navegador divide essa renderização em pequenas atividades, como construção do DOM e do CSSOM, paint, repaint, flow e reflow.&lt;/p&gt;

&lt;p&gt;São muitos conceitos, porém hoje iremos focar nosso estudo no DOM.&lt;/p&gt;

&lt;h2&gt;
  
  
  DOM
&lt;/h2&gt;

&lt;p&gt;O DOM (Document Objet Model) é uma representação em forma de estrutura de dados utilizada para representar hierarquicamente um documento html. A palavra hierarquicamente é importante, pois o DOM tem o visual de uma árvore, onde cada elemento é um nó que pode ter filhos que também podem ter filhos. Exatamente como na imagem abaixo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu0fz0fb6qad6qd2nqdev.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu0fz0fb6qad6qd2nqdev.png" alt="DOM" width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No código essa representação ficaria assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!doctype html&amp;gt;
&amp;lt;html&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;Um título&amp;lt;/title&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;a href="#"&amp;gt;Um link&amp;lt;/a&amp;gt;
    &amp;lt;h1&amp;gt;Um cabeçalho&amp;lt;/h1&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Os navegadores utilizam essa representação, seguindo os padrões W3C &lt;a href="https://dom.spec.whatwg.org/" rel="noopener noreferrer"&gt;DOM&lt;/a&gt; e &lt;a href="https://dom.spec.whatwg.org/" rel="noopener noreferrer"&gt;WHATWG DOM&lt;/a&gt;, como um guia para identificar quais elementos devem ser renderizados na tela e qual a hierarquia eles devem seguir.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Estrutura do DOM
&lt;/h3&gt;

&lt;p&gt;O DOM é composto por diversos objetos, são eles: document, nodes, elements, attributes e texto.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Document(documento): Essa é a raiz da nossa árvore, a tag &lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Node(nó): Cada parte da nossa árvore é um nó. O document é um nó, um elemento é um nó e os filhos desse elemento também é um nó.&lt;/li&gt;
&lt;li&gt;Element(elemento): O nó do tipo elemento representa uma tag. A tag &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; é um nó do tipo elemento.&lt;/li&gt;
&lt;li&gt;Attribute(atributo): Esse objeto representa o atributo de cada elemento. Class é o atributo da nossa tag div &lt;code&gt;&amp;lt;div class="minha-classe"&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Text(texto): Geralmente esse é o último nível da árvore. O texto que vai ser exibido em tela.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Todos os objetos que compõem o DOM podem ser manipulados utilizando javascript através da api DOM disponível em todos os navegadores modernos.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Manipulando o DOM
&lt;/h3&gt;

&lt;p&gt;No desenvolvimento moderno, com ferramentas como React, Vue ou Angular, a necessidade de manipular diretamente o DOM tem se tornado cada vez mais rara.&lt;/p&gt;

&lt;p&gt;Isso ocorre porque cada atualização no DOM é um processo custoso em termos de desempenho. Tecnologias como React foram criadas justamente para otimizar essas operações, permitindo a manipulação eficiente da interface sem sacrificar a performance. No entanto, há cenários específicos em que a manipulação direta do DOM ainda será necessária, e quando esse momento chegar, é importante estar preparado(a).&lt;/p&gt;

&lt;p&gt;Para acessar e manipular um elemento do DOM pela primeira vez, abra o console do navegador e execute o seguinte código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;elemento&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;estruturadodom&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;elemento&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Manipulando o DOM&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Na primeira linha buscamos um elemento que tem o id &lt;code&gt;estruturadodom&lt;/code&gt;, cada seção do meu blog tem o titulo como id.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Na segunda linha alteramos a propriedade textContent do nosso elemento.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Esse trecho foi para exemplificar, por isso a simplicidade. Grande parte das iterações que você encontra ao longo da internet acontecem por meio de alterações e atualizações do DOM.&lt;/p&gt;

&lt;p&gt;Recomendo acessar os sites que você já tem costume e começar a analisar as iterações que acontecem e se possível tente replicá-las. Esse é um ótimo exercício para aumentar sua fluência&lt;br&gt;
em manipulação de DOM.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusão
&lt;/h3&gt;

&lt;p&gt;O DOM é uma representação em forma de arvore utilizada pelos navegadores para o processo de renderização.&lt;/p&gt;

&lt;p&gt;Podemos acessar elementos dessa árvore e manipulá-los livremente utilizando javascript. Saber executar esse tipo de operação é essencial para compreender frameworks e bibliotecas como react, angular e vue.&lt;/p&gt;

&lt;p&gt;O conhecimento de base é o mais importante, mas é constantemente negligenciado.&lt;br&gt;
No contexto do desenvolvimento web, conhecer html, css, javascript e como o navegador funciona é essencial. Com essa base sólida, você vai conseguir aprender qualquer tecnologia que derive desses fundamentos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Muito obrigado!!
&lt;/h3&gt;

&lt;p&gt;Obrigado por ter chegado até aqui!&lt;/p&gt;

&lt;p&gt;Espero que tenha aprendido algo novo ao longo dessa leitura.&lt;/p&gt;

&lt;p&gt;Até a próxima!&lt;/p&gt;

&lt;h3&gt;
  
  
  Referências
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://developer.mozilla.org/pt-BR/docs/Web/API/Document_Object_Model/Introduction" rel="noopener noreferrer"&gt;MDN - O que é o DOM&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.alura.com.br/artigos/o-que-e-o-dom" rel="noopener noreferrer"&gt;Alura - O que é o DOM&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.hostinger.com.br/tutoriais/dom-o-que-e" rel="noopener noreferrer"&gt;Hostinger - O que é o DOM&lt;/a&gt;&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>programming</category>
    </item>
    <item>
      <title>Padrões React: Container/Presentational</title>
      <dc:creator>Cristiano Gonçalves ⛩️</dc:creator>
      <pubDate>Wed, 23 Aug 2023 22:44:35 +0000</pubDate>
      <link>https://dev.to/gonkristiano/padroes-react-containerpresentational-2oj1</link>
      <guid>https://dev.to/gonkristiano/padroes-react-containerpresentational-2oj1</guid>
      <description>&lt;p&gt;Fala, galera! Hoje vou começar uma pequena série focada em padrões.&lt;/p&gt;

&lt;p&gt;Inicialmente ela vai ser focada em padrões do React, mas futuramente pretendo expandir para padrões de projetos de modo geral.&lt;/p&gt;

&lt;p&gt;Um ponto super importante é que antes de tentar aplicar qualquer padrão de código/projeto etc é preciso entender qual problema ele vai resolver. Nunca aplique um padrão(pattern) só por capricho, pois toda escolha técnica é rodeada por prós e contras.&lt;/p&gt;

&lt;h3&gt;
  
  
  Qual o problema?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7thzwz3tzwg14vhp7m9o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7thzwz3tzwg14vhp7m9o.png" alt="Linha de montagem"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Uma das premissas dos frameworks frontends modernos, como o nosso querido react, é componentizar e escrever código com responsabilidades bem definidas. É como as antigas linhas de montagem, onde cada pessoa tem seu papel muito bem definido e essa pessoa é especialista em executar uma única função em diversos cenários. Uma pessoa especialista em apertar parafusos vai conseguir apertar o parafuso de um carro ou de um computador.&lt;br&gt;
Sei que é um exemplo bem abstrato... Mas o grande ponto é entender que a separação de responsabilidades pode e deve ser aplicada na construção das suas aplicações e esse tipo de separação facilita o reaproveitamento.&lt;/p&gt;

&lt;p&gt;Depois dessa explicação você nota algum problema ao analisar o código abaixo?&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;MusicList&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;musics&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setMusics&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;([]);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setLoading&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getMusics&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="p"&gt;...&lt;/span&gt; &lt;span class="nx"&gt;alguma&lt;/span&gt; &lt;span class="nx"&gt;regra&lt;/span&gt; &lt;span class="nx"&gt;de&lt;/span&gt; &lt;span class="nx"&gt;negócio&lt;/span&gt; &lt;span class="nx"&gt;antes&lt;/span&gt; &lt;span class="nx"&gt;de&lt;/span&gt; &lt;span class="nx"&gt;buscar&lt;/span&gt; &lt;span class="nx"&gt;músicas&lt;/span&gt;
      &lt;span class="nf"&gt;setLoading&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;api-de-musicas.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nf"&gt;setMusics&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;musics&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
          &lt;span class="nf"&gt;setLoading&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;]);&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Carregando..&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;musics&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;music&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;music&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h3&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;music&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h3&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h4&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;music&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;artist&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h4&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  O padrão Container &amp;amp; Presentational
&lt;/h3&gt;

&lt;p&gt;O código acima tem um component que faz mais de uma coisa... ele não é "especialista" em nada. O padrão &lt;strong&gt;Container &amp;amp; Presentational&lt;/strong&gt; tem o objetivo de resolver esse problema, separando lógica e regras de negócios em components do tipo container e interface em components do tipo presentational.&lt;/p&gt;

&lt;p&gt;Ainda não entendeu o que diferencia um component container de um component presentational?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Container:&lt;/strong&gt; Se você precisa exibir uma lista de músicas o component container não vai se preocupar em &lt;strong&gt;como você vai exibir&lt;/strong&gt;, ele vai se preocupa com &lt;strong&gt;o que vai ser exibido&lt;/strong&gt;. A chamada na api para buscar as músicas, o agrupamento das músicas por categoria ou qualquer tipo de tratamento será feito por esse tipo de component.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Presentational:&lt;/strong&gt; Esse é um component apenas de apresentação, onde seu único objetivo é exibir informações em tela e cuidar das interações com o usuário. No exemplo da lista de músicas esse component vai ser responsável por exibir as músicas em formato de grade ou lista, exibir a capa do album quadrada ou arredondada e tudo que diz respeito a forma que a informação será apresentada, pois esse é um presentational component(component de apresentação).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vamos reescrever o mesmo trecho de código que vimos anteriormente, mas agora aplicando o padrão que acabamos de aprender.&lt;/p&gt;

&lt;p&gt;Exemplo de um component container:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;MusicListContainer&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;musics&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setMusics&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;([]);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setLoading&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getMusics&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="p"&gt;...&lt;/span&gt; &lt;span class="nx"&gt;alguma&lt;/span&gt; &lt;span class="nx"&gt;regra&lt;/span&gt; &lt;span class="nx"&gt;de&lt;/span&gt; &lt;span class="nx"&gt;negócio&lt;/span&gt; &lt;span class="nx"&gt;antes&lt;/span&gt; &lt;span class="nx"&gt;de&lt;/span&gt; &lt;span class="nx"&gt;buscar&lt;/span&gt; &lt;span class="nx"&gt;músicas&lt;/span&gt;
      &lt;span class="nf"&gt;setLoading&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;api-de-musicas.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nf"&gt;setMusics&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;musics&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
          &lt;span class="nf"&gt;setLoading&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;]);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;MusicList&lt;/span&gt; &lt;span class="na"&gt;musics&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;musics&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;loading&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Exemplo de um component presentational:&lt;/p&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;

&lt;p&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;MusicList&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Carregando..&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;;&lt;/span&gt;&lt;br&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;br&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;musics&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;music&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;br&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;music&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h3&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;music&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h3&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h4&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;music&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;artist&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h4&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;
      &lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;br&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;/p&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  O que ganho fazendo isso?&lt;br&gt;
&lt;/h3&gt;

&lt;p&gt;Esse é um padrão bem simples, mas que traz alguns ganhos interessantes, são eles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Separação das responsabilidades. No exemplo acima ficou bem claro qual component era responsável por cuidar de regras de negócio e qual é responsável apenas por apresentar dados para o usuário.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reutilização. Nosso component de MusicList pode ser utilizado em diversos cenários em que precisamos exibir músicas. Sejam músicas de resultados de uma busca ou as músicas favoritas de um usuário.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Testabilidade. Testar components de apresentação sem regra de negócio é muito simples, pois precisamos apenas passar props e nos preocupar com o comportamento do component e não com chamadas de api e etc.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Devo utilizar sempre esse padrão?
&lt;/h3&gt;

&lt;p&gt;É importante sempre tentar separar ao máximo as responsabilidades do seu código, porém o padrão Container &amp;amp; Presentational não é algo mais recomendado pela comunidade, pois conseguimos fazer esse mesmo tipo de separação utilizando hooks de uma maneira bem mais elegante.&lt;/p&gt;

&lt;p&gt;Mas não se espante se encontrar projetos que ainda utilizem essa abordagem, pois ela resolveu muitos problemas em tempos de components de classes. Apesar de não ser algo que você vai sair aplicando em todos os cenários no seu dia a dia, conhecer como os padrões do react foram evoluindo é essencial para entender como estamos resolvendo os problemas atuais.&lt;/p&gt;

&lt;h3&gt;
  
  
  Isso é tudo, pessoal!
&lt;/h3&gt;

&lt;p&gt;Fico feliz que você chegou até aqui e espero que tenha aprendido algo novo ao longo dessa leitura. Em breve irei trazer mais artigos abordando outros padrões do react. Até mais!&lt;/p&gt;

&lt;h3&gt;
  
  
  Referências
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/kentcdodds/ama/issues/545" rel="noopener noreferrer"&gt;Issue - React Hooks and Container/Presenter Component Pattern #545&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://javascriptpatterns.vercel.app/patterns/react-patterns/conpres" rel="noopener noreferrer"&gt;Container/Presentational Pattern&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>react</category>
      <category>frontend</category>
      <category>patterns</category>
      <category>programming</category>
    </item>
    <item>
      <title>Meus erros e aprendizados em 1 ano como Tech Lead</title>
      <dc:creator>Cristiano Gonçalves ⛩️</dc:creator>
      <pubDate>Fri, 05 Aug 2022 21:10:00 +0000</pubDate>
      <link>https://dev.to/gonkristiano/meus-erros-e-aprendizados-em-1-ano-como-tech-lead-2p36</link>
      <guid>https://dev.to/gonkristiano/meus-erros-e-aprendizados-em-1-ano-como-tech-lead-2p36</guid>
      <description>&lt;p&gt;Faz um 1 ano e 3 meses que aceitei oficialmente um desafio para ocupar o cargo de Tech Lead na &lt;a href="https://www.zak.app/" rel="noopener noreferrer"&gt;Zak&lt;/a&gt;, uma posição que me preparei bastante para ocupar, ou ao menos achei ter me preparado o suficiente.... Porém, a medida que os dias iam passando, o time ia se estruturando e as situações foram aparecendo, eu percebi que não estava tão preparado como imaginei. &lt;/p&gt;

&lt;p&gt;Errei bastante, questionei minha capacidade enquanto líder, tive vontade de desistir, mas também recebi feedbacks de que estava fazendo um bom trabalho. E é por isso que estou confortável em  escrever um texto compartilhando alguns dos meus aprendizados, pois esse era o tipo de conteúdo que poderia ter me ajudado no início da minha jornada enquanto líder.&lt;/p&gt;

&lt;h3&gt;
  
  
  Qual o papel de um Dev e de um Tech Lead?
&lt;/h3&gt;

&lt;p&gt;Antes de falar sobre erros e acertos é preciso entender quais as diferenças entre um &lt;strong&gt;Dev&lt;/strong&gt; e um &lt;strong&gt;Tech Lead&lt;/strong&gt;. De maneira bastante prática o &lt;strong&gt;Dev&lt;/strong&gt; tem um perfil executor e na grande maioria das vezes não possuem dependências. Enquanto um &lt;strong&gt;Tech Lead&lt;/strong&gt; tem a função de liderar uma equipe, conduzindo o time, gerenciando o projeto, mantendo uma boa comunicação com outras equipes da empresa e auxiliando na evolução técnica dos seus liderados. &lt;/p&gt;

&lt;p&gt;Agora que você já tem uma ideia básica sobre a diferença entre o dev e tech lead vamos aos principais erros que cometi e aprendizados que tive a medida que fui avançando no dia-a-dia de um líder técnico.&lt;/p&gt;

&lt;h2&gt;
  
  
  Não delegar
&lt;/h2&gt;

&lt;p&gt;Esse foi um dos meus principais erros e foi algo que custou bastante da minha saúde física e mental... Inicialmente eu não tinha entendido que não estava mais no perfil de executor e segui acumulando atribuições que deveriam ser direcionadas para o time. &lt;/p&gt;

&lt;p&gt;Isso me deixou extremamente sobrecarregado e meu desempenho enquanto líder não estava sendo dos melhores, pois não estava focando no time e sim nas tarefas. Além disso, o cansaço físico e mental foram aumentando e não importava o quanto eu dormisse, o cansaço continuava.&lt;/p&gt;

&lt;p&gt;As coisas só começaram a fluir quando eu entendi que não iria conseguir fazer tudo sozinho. Que precisava confiar no meu time e que agora o meu papel era o de garantir o sucesso dos meus liderados na execução das tarefas. Inicialmente foi bem difícil virar essa chavinha, pois um dia você é responsável por duas ou três tarefas na sprint e no outro dia você é responsável pelo sucesso de dez ou quinze tarefas de todo o seu time. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Toda sua independência passa a ser uma dependência, pois sem o sucesso do time você não tem sucesso.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Não entender a capacidade do time
&lt;/h2&gt;

&lt;p&gt;Quando me tornei tech lead eu já tinha bastante contexto sobre o projeto e dominava bastante das regras de negócio, por isso, eu tinha facilidade em resolver determinados problemas com mais velocidade que os devs menos experientes do projeto, algo esperado... Porém, sempre que o time tinha alguma dificuldade eu pensava "eu consigo resolver isso rapidinho" e por causa desse pensamento o planejamento do meu time tinha diversos problemas, pois eu planejava para o time pensando estar planejando para mim.&lt;/p&gt;

&lt;p&gt;O planejamento do time melhorou expressivamente quando eu entendi que cada pessoa tem um ritmo diferente e que eu precisava entender qual era a velocidade do time independente da minha velocidade de desenvolvimento. E que meu trabalho era buscar soluções para que a eficiência do time aumentasse cada vez mais. Não interessa o quão rápido eu possa resolver o problema e sim o quanto eu posso auxiliar meu time para resolver o problema com a melhor qualidade e velocidade possível.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;O papel de um tech lead é entender a capacidade do time e encontrar formas de aumentar a produtividade do mesmo.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Sem um time engajado nada vai funcionar
&lt;/h2&gt;

&lt;p&gt;Existem diversas formas de engajar uma pessoa... não vou me aprofundar nisso, pois cada pessoa é singular e cada time tem uma configuração diferente. Mas enquanto líder, o grande ponto é encontrar uma forma de mostrar o valor do trabalho para seus liderados, pois isso é um dos pontos-chave para manter um time engajado. &lt;br&gt;
Enquanto eu apenas passava tarefas e cobrava sem mostrar o porquê de cada decisão e o impacto que elas traziam para o negócio, o sentimento do time não era dos melhores. Isso mudou quando eles passaram a enxergar o valor das suas entregas e se sentiram mais envolvidas em todo o processo.&lt;br&gt;
Demonstrar esse valor não é uma coisa simples, pois as pessoas têm dificuldade em enxergar valor nas pequenas coisas, porém  uma forma de contornar isso é utilizando métricas de forma que o time entenda sua evolução, seus pontos de falhas e suas conquistas sem um ar analítico de julgamento. Dessa forma, as métricas podem ser sua maior aliada no engajamento do time, desde que você as utilize com propósito de dar visibilidade e de conduzi-los do ponto A ao ponto B sempre visando a melhoria constante ao invés do julgamento continuo.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;O sentimento de trabalhar em algo que não gera resultados é péssimo, então um líder precisa cuidar para que o time enxergue o real valor de cada detalhe que vocês trabalharem juntos.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Ser transparente é essencial
&lt;/h2&gt;

&lt;p&gt;Desde meu primeiro dia enquanto líder, eu optei por ser bastante transparente com minha equipe. Eles sempre souberam quando as coisas estavam indo bem, quando as coisas não estavam indo bem, quando eu estava muito confiante ou quando eu estava com a confiança baixa. Para alguns isso é algo negativo, pois tem pessoas que acreditam que o líder precisa ser uma figura inabalável, que não demonstra suas inseguranças para o time... em outras palavas, nada humano. &lt;/p&gt;

&lt;p&gt;Eu optei pelo caminho da transparência, pois meu time precisa confiar em mim nos momentos bons e nos momentos ruins e isso é algo muito difícil,  porem, em 1 ano e 3 meses como &lt;strong&gt;Tech Lead&lt;/strong&gt;, com diversas configurações diferentes de times e com liderados de perfis diferentes, ser transparente foi o que me ajudou construir boas relações e ser uma figura confiável para os meus liderados. &lt;/p&gt;

&lt;p&gt;É claro que você precisa ser responsável, consciente e prezar sempre pelo bem-estar do seu time, então podem existir situações em que a transparência pode mais atrapalhar do que ajudar, mas isso não pode ser algo corriqueiro. E até nesse tipo de situação, sempre que possível, é importante ser transparente do porquê você não foi transparente.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Quando você é acessível e transparente com o seu time uma relação de confiança é construida, o que facilita todo o trabalho.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  E chegamos ao fim
&lt;/h2&gt;

&lt;p&gt;Esse foi a primeira vez que abordei um conteúdo não técnico... Confesso que foi bem mais difícil de expressar tudo em palavras, mas espero que tenha sido claro e te ajude de alguma forma.&lt;/p&gt;

&lt;p&gt;Ao longo da minha jornada eu tive mais erros, aprendizados, frustrações e alegrias no cargo de Tech Lead, mas vou deixar para falar mais sobre em outra ocasião. &lt;/p&gt;

&lt;p&gt;Muito obrigado por chegar até aqui e até a próxima!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>management</category>
      <category>leadership</category>
    </item>
    <item>
      <title>Minha jornada criando 30 sites em 30 dias</title>
      <dc:creator>Cristiano Gonçalves ⛩️</dc:creator>
      <pubDate>Tue, 02 Aug 2022 00:28:36 +0000</pubDate>
      <link>https://dev.to/gonkristiano/minha-jornada-criando-30-sites-em-30-dias-opo</link>
      <guid>https://dev.to/gonkristiano/minha-jornada-criando-30-sites-em-30-dias-opo</guid>
      <description>&lt;p&gt;Quem nunca achou uma vaga maneira e pensou em enviar um currículo, mas desistiu por não ter o que mostrar? E quantas vezes alegamos que não tivemos oportunidade de trabalhar com a tecnologia X ou Y?&lt;/p&gt;

&lt;p&gt;Muitas vezes damos a desculpa de não ter um portfólio por nunca ter trabalhado, algumas pessoas até alegam que não constroem projetos fictícios por falta de ideias. Pois bem, que bom que temos uma comunidade maravilhosa que está sempre disposta a criar formas de ajudar.&lt;/p&gt;

&lt;p&gt;Nesse post eu vou contar um pouco sobre minha jornada com o desafio &lt;a href="https://www.subscribepage.com/30days30sites" rel="noopener noreferrer"&gt;30 Days 30 Sites&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8ag7ZN2h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.crisgon.dev/static/c673c4ae9074d9a9b4bb6265fb2d2e74/0b79a/30days30sites.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8ag7ZN2h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.crisgon.dev/static/c673c4ae9074d9a9b4bb6265fb2d2e74/0b79a/30days30sites.png" title="30 dias 30 sites" alt="30 dias 30 sites" width="800" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Aceitando o desafio
&lt;/h3&gt;

&lt;p&gt;Tudo começou quando descobri a hashtag #100DaysOfCode no twitter, fui navegando de post em post até que cheguei na hashtag #30Days30Sites e descobri esse projeto magnífico, que consiste em enviar um email por dia durante 30 dias com um tema e uma página de exemplo. Depois disso é só colocar a mão na massa e desenvolver.&lt;/p&gt;

&lt;h3&gt;
  
  
  Novas tecnologias
&lt;/h3&gt;

&lt;p&gt;Um dos pontos fortes desse desafio é a liberdade que é dada para o participante, pois ele nos entrega apenas um tema e deixa todo o resto a nosso critério, essa é uma boa forma de experimentar diversas tecnologias e isso vai nos permitir adquirir um conhecimento prático, coisa que não conseguimos apenas lendo um livro ou fazendo um curso.\&lt;br&gt;
Durante a minha trajetória eu pude trabalhar na prática durante grande parte do desafio com PUG, SASS, GULP e Mobile First. A possibilidade de trabalhar com Mobile First em mais de 20 projetos me deu uma bagagem considerável sobre desenvolvimento responsivo, coisa que antes eu não tinha segurança para desenvolver e sempre ficava buscando algum framework para todas as ocasiões.\&lt;br&gt;
Na reta final eu ainda tive a oportunidade de usar o CSS Grid e consegui bons resultados ao utiliza-lo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Trabalhando com temas que gosto
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8vaKOZGL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.crisgon.dev/static/1a92f7911e95d088e1ffc629bb49ff10/60a48/starwars.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8vaKOZGL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.crisgon.dev/static/1a92f7911e95d088e1ffc629bb49ff10/60a48/starwars.png" title="Site 26: Jogo do Star Wars" alt="Site 26: Jogo do Star Wars" width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como havia dito anteriormente, o desafio nos possibilita liberdade para construir aquilo que desejamos. Graças a isso pude construir sites de temas que gosto e isso dá uma certa motivação para continuar.&lt;/p&gt;

&lt;h3&gt;
  
  
  Nem tudo são flores…
&lt;/h3&gt;

&lt;p&gt;O desafio propõe a criação de 30 sites em 30 dias, entretanto nem sempre é possível concluir durante o prazo. Sempre aparecem complicações que acabam atrapalhando o processo, porém não desanime e siga em frente.\&lt;br&gt;
Eu iniciei minha jornada no fim do semestre da faculdade, ou seja, fiz algo muito arriscado… Sempre precisava estudar para alguma prova ou fazer algum trabalho, e isso acabava comprometendo meu progresso com a criação dos sites. Fiquei alguns dias sem codar e teve momentos em que eu tirava 1 ou 2 horas para fazer um site, verificando todos os sites da para perceber quais foram feito nessa situação.&lt;/p&gt;

&lt;h3&gt;
  
  
  Recebendo e dando feedbacks
&lt;/h3&gt;

&lt;p&gt;&lt;del&gt;Todo mundo precisa de um site&lt;/del&gt;Todo mundo precisa de um feedback! Essa é uma das partes mais importantes do desafio, pois é com ela que encontramos a possibilidade de melhorar e até mesmo forças para continuar. Mas esteja preparado para receber criticas construtivas sobre o seu trabalho, também esteja preparado para não se inflar de orgulho quando receber elogios. Com os feedbacks também temos a oportunidade de conhecer novas pessoas e contribuir com o crescimento delas.&lt;/p&gt;

&lt;p&gt;Os feedbacks em geral são dados no Twitter ou por meio do grupo do facebook, onde você simplesmente compartilha seu trabalho e recebe opiniões sobre ele.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ez8u54yA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.crisgon.dev/static/188e0fe89b25567298bbe977958a081b/72aae/feedbacks.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ez8u54yA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.crisgon.dev/static/188e0fe89b25567298bbe977958a081b/72aae/feedbacks.png" title="Feedbacks no facebook" alt="Feedbacks no facebook" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Durante os feedbacks, provavelmente você vai precisar explicar como fez determinada parte do site ou como utilizar determinada tecnologia. Isso é muito bom, pois é explicando que se aprende!&lt;/p&gt;

&lt;p&gt;Como eu disse logo ali em cima, “Todo mundo precisa de um feedback!”. Outras pessoas também estão fazendo o desafio e você não só pode, mas DEVE, dar feedbacks sobre os trabalhos, seja dando dicas de como melhorar ou simplesmente tirando dúvidas.&lt;/p&gt;

&lt;h3&gt;
  
  
  Alguns trabalhos
&lt;/h3&gt;

&lt;p&gt;Os temas que recebemos diariamente são bastante diversificados e nos dão a possibilidade de construir sites de vários tipos. Esses são alguns dos que mais curti o resultado.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://crisgon.github.io/30Days30Sites/blog/index.html" rel="noopener noreferrer"&gt;Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://crisgon.github.io/30Days30Sites/celebrity/default.html" rel="noopener noreferrer"&gt;Celebridade&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://crisgon.github.io/30Days30Sites/events/default.html" rel="noopener noreferrer"&gt;Evento&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://crisgon.github.io/30Days30Sites/fashion/index.html" rel="noopener noreferrer"&gt;Shop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://crisgon.github.io/30Days30Sites/game/src/index.html" rel="noopener noreferrer"&gt;Game&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Você pode conferir todos os trabalhos &lt;a href="https://crisgon.github.io/30Days30Sites/projects/index.html" rel="noopener noreferrer"&gt;aqui&lt;/a&gt;, onde eu listo as tecnologias que usei em cada site. E pode verificar os códigos no meu &lt;a href="https://github.com/crisgon/30Days30Sites" rel="noopener noreferrer"&gt;github&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Outros dailys
&lt;/h3&gt;

&lt;p&gt;Esse não é o único desafio, existem diversos outros e alguns deles estão listados nesse &lt;a href="https://github.com/AlexsandroSA/daily-programming-challenges" rel="noopener noreferrer"&gt;repositório&lt;/a&gt;, da uma olhada que provavelmente vai ter um que se encaixe no que você precisa.&lt;/p&gt;

&lt;p&gt;Atualmente eu estou fazendo mais um daily, o dailycssimages. Em breve vou fazer um post sobre ele, mas se quiser ver um pouco dos resultados é só olhar no meu &lt;a href="https://codepen.io/collection/DjydKR/" rel="noopener noreferrer"&gt;codepen&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusão
&lt;/h3&gt;

&lt;p&gt;Concluir essa jornada não vai me garantir um emprego, mas me garantiu muito conhecimento e crescimento. É claro que os projetos não foram feitos da melhor forma possível e ainda tenho muito a melhorar, mas o importante do desafio é o comprometimento e a busca continua por melhorias.\&lt;br&gt;
Nessa caminhada*&lt;em&gt;o que realmente importa não é o resultado final, mas sim o processo&lt;/em&gt;*. A conclusão desse desafio não mostra apenas que sou capaz de construir sites, ela mostra o comprometimento e a vontade de crescimento.&lt;/p&gt;

&lt;h4&gt;
  
  
  E você? O que está esperando para se desafiar?
&lt;/h4&gt;

&lt;p&gt;Obrigado por ler até aqui!! Se curtiu esse post compartilha com seus amigos e deixa um comentário caso inicie um desafio.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>css</category>
      <category>html</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
