<?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: Thiago Pederzolli Machado da Silva</title>
    <description>The latest articles on DEV Community by Thiago Pederzolli Machado da Silva (@thiagopederzolli).</description>
    <link>https://dev.to/thiagopederzolli</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%2F482911%2F7e1df43b-05e4-4148-9515-badd6b20ac07.jpeg</url>
      <title>DEV Community: Thiago Pederzolli Machado da Silva</title>
      <link>https://dev.to/thiagopederzolli</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thiagopederzolli"/>
    <language>en</language>
    <item>
      <title>Passado e futuro?</title>
      <dc:creator>Thiago Pederzolli Machado da Silva</dc:creator>
      <pubDate>Thu, 25 Mar 2021 21:05:09 +0000</pubDate>
      <link>https://dev.to/thiagopederzolli/passado-e-futuro-n0g</link>
      <guid>https://dev.to/thiagopederzolli/passado-e-futuro-n0g</guid>
      <description>&lt;h4&gt;
Olá! 
&lt;/h4&gt;

&lt;p&gt;
Se você chegou direto aqui e não tem base nenhuma sobre Reat, aconselho a voltar e ler o &lt;a href="https://dev.to/thiagopederzolli/react-e-seus-tres-mosqueteiros-4lh"&gt;React e seus três mosqueteiros&lt;/a&gt; primeiro para se contextualizar melhor. 
&lt;/p&gt;

&lt;p&gt;
Agora se você já é familiarizado com os conceitos de componentes, propriedades e estados em React, boa leitura!💜
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nt"&gt;-------------------------------------------------------------&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;
Dando continuidade aos textos sobre conceitos básicos de React, temos a questão de criação de componentes. A forma de como os componentes são criados em React dividem-se em duas fases, o início e evolução da ferramenta através do &lt;strong&gt;Class Component&lt;/strong&gt;, até o momento que foi implementado os &lt;strong&gt;&lt;em&gt;Hooks&lt;/em&gt;&lt;/strong&gt; no React que tornaram viáveis utilizar algumas funcionalidades essenciais do React com &lt;strong&gt;Functional Components&lt;/strong&gt;.
&lt;/p&gt;

&lt;p&gt;
De sua origem até o surgimento dos Hooks, os estados só eram acessíveis através de Class Components. E essa implementação dos Hooks é algo recente,não vá lendo isso e achando que &lt;em&gt;“ah, então agora só estudar Functional Components que ta tranquilo.”&lt;/em&gt;. Você irá quebrar a cara em diversas oportunidades de inserção no mercado.
&lt;/p&gt;

&lt;p&gt;
Talvez não tenha mais tanto sentido na criação de Class Components, porém você ainda pode lidar com diversos códigos legados e outras ferramentas que criam a base dos componentes em forma de Class.
&lt;/p&gt;

&lt;h2&gt;
Imutabilidade:
&lt;/h2&gt;

&lt;p&gt;
Um detalhe importante de lembrar antes de entrar na diferenciação de como os componentes funcionam, é a questão da imutabilidade do React.
&lt;/p&gt;

&lt;p&gt;
Por que é importante lembrar disso agora? Porque nos exemplos falarei sobre os estados e esse conceito é muito importante para entender a atualização de estados.
&lt;/p&gt;

&lt;p&gt;
O que esse conceito em poucas palavras é a ideia de que &lt;strong&gt;um valor de uma variável nunca deve ser alterada diretamente&lt;/strong&gt;, precisamos recuperar esse valor, alterá-lo em uma nova variável juntando o novo valor e então atribuir essa variável ao método de atualizar o estado, garantindo assim um &lt;em&gt;novo espaço de memória&lt;/em&gt; com essa nova informação, sem afetar diretamente aquela informação anterior que já ocupava outro espaço na memória.
&lt;/p&gt;

&lt;h2&gt;
Class Components:
&lt;/h2&gt;

&lt;p&gt;
Baseado na premissa de Objects do React, o Class é um objeto que estende o objeto Component, um objeto nativo do React responsável por ter as principais propriedades e métodos para criação de componentes, por isso começamos ele com a seguinte sintaxe:
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;ExampleComponent&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;render&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;(&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Olá Mundo!&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&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="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;ExampleComponent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;
Um dos principais métodos que ele herda é o &lt;strong&gt;render()&lt;/strong&gt;, responsável por retornar o JSX daquele componente. Porém podemos criar novos métodos para utilizar neste componente. Porém, por padrão, os métodos criados não são vinculados a classe, para isso, precisamos invocar outro método herdado que é o &lt;strong&gt;constructor()&lt;/strong&gt;, ele nos permitirá fazer o &lt;strong&gt;bind()&lt;/strong&gt; do método criado com a instância, que é representada pelo termo &lt;strong&gt;&lt;em&gt;this&lt;/em&gt;&lt;/strong&gt;, quando você faz o bind do método com o &lt;em&gt;this&lt;/em&gt;, você está &lt;strong&gt;vinculando aquele método à instância do componente associado com o elemento da DOM que representa esse componente&lt;/strong&gt;.
&lt;/p&gt;

&lt;p&gt;
Se você criar um método e usar diretamente no render, ele será executado, porém se ele não for de uso imediato, como um método que irá fazer uma atualização de estado, precisamos garantir o bind, para isso precisamos do método constructor() e dentro dele do método &lt;strong&gt;super()&lt;/strong&gt;. Dentro do constructor(), primeiro declaramos o super() que irá garantir que nosso componente continuará herdando os métodos do Component e também será possível adicionar novos métodos.
&lt;/p&gt;

&lt;p&gt;
Feito isso podemos fazer o bind() de nossa função e teremos algo assim:
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;ExampleComponent&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handleChange&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handleChange&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bind&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;handleChange&lt;/span&gt;&lt;span class="p"&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="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;atualiza um estado!&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="nx"&gt;render&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;(&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Olá Mundo!&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&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="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;ExampleComponent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;
Lembrando que precisamos colocar o &lt;em&gt;this&lt;/em&gt; antes do nome da função também para vincular ao método da nossa instância.
&lt;/p&gt;

&lt;p&gt;Sobre as props, o acesso é da mesma forma que se acessa os estados, através do &lt;em&gt;this&lt;/em&gt; para vincular a instância atual, caso precise usar uma props para atualizar algum valor de estado inicial na hora de criar o state do componente, lembre-se passar as props por parâmetro para o constructor(props) e super(props):&lt;br&gt;
&lt;/p&gt;
&lt;br&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;ExampleComponent&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;constructor&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;span class="k"&gt;super&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="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;newState&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;this&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;data&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;render&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;(&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Olá Mundo!&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&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="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;ExampleComponent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;
Por fim, outra questão muito importante do método constructor() é que é nele que conseguimos construir nossos estados dentro de um Class Component. A criação de estados é bem diferente de uma forma de criação de componente, no caso de Class Components, construimos dentro do constructor e sua atualização se dá pelo mesmo método, vou mostrar o exemplo clássico do contador com Class Component e Functional Component para que seja possível compreender como criar e atualizar o estado.
&lt;/p&gt;

&lt;p&gt;
Em um Class Component teríamos um código assim:
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Counter&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;count&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="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;increment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;increment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bind&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;increment&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&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;render&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;(&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;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&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;count&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;h1&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;button&lt;/span&gt;
          &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"button"&lt;/span&gt;
          &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;increment&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          Aumentar em 1
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&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;div&lt;/span&gt;&lt;span class="p"&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="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;
Outro detalhe relevante da criação de componentes, ai tanto para Class quanto Functional é no return, que o &lt;strong&gt;JSX só permite o retorno de um elemento HTML por componente&lt;/strong&gt;. Isso &lt;strong&gt;não&lt;/strong&gt; quer dizer que você, &lt;em&gt;literalmente&lt;/em&gt;, só pode retornar um elemento HTML por componente, mas o retorno final deve estar englobado dentro de um elemento só, por isso vocês podem perceber que o retorno do contador tem uma tag &lt;/p&gt;
&lt;h1&gt;&lt;/h1&gt; e uma tag , mas ambas estão englobadas por uma tag .


&lt;p&gt;
Outra questão relevante sobre os componentes é que eles possuem &lt;strong&gt;ciclos de vida&lt;/strong&gt;, que era de domínio do Class Component e foi permitido ao Functional Component repetir os comportamentos com a implementação de Hooks.
&lt;/p&gt;

&lt;p&gt;
Os ciclos de vida referem-se aos momentos de renderização do componente e os métodos para trabalhar esses momentos acredito que são auto-explicativos. Sobre a implementação deles em código acredito que cabe um texto a parte para explicações, mas os principais são:
&lt;/p&gt;


&lt;ul&gt;

&lt;li&gt;

&lt;strong&gt;componentDidMount&lt;/strong&gt; para executar uma ação após o componente ser inserido no DOM;
&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;shouldComponentUpdate&lt;/strong&gt; para avaliar se uma atualização do componente deve ou não acontecer naquele momento;
&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;componentDidUpdate&lt;/strong&gt; para executar uma ação após o componente ser atualizado;
&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;componentWillUnmount&lt;/strong&gt; para realizar uma ação antes de o componente ser desmontado.
&lt;/li&gt;

&lt;h2&gt;
Functional Components:
&lt;/h2&gt;

&lt;p&gt;
Componentes funcionais cresceram em termos de utilização após o lançamento dos Hooks, que permitem uso de estados e ciclos de vida. A sintaxe também acaba sendo mais simples, acabam-se as preocupações de bind, pois acaba a questão da herança de objetos, agora trabalhamos com funções, então a base do componente acaba sendo simples:
&lt;/p&gt;



&lt;/ul&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;ExampleComponent&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;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Olá Mundo&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&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="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;ExampleComponent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;
A partir dai podemos trabalhar com os estados a partir de um hook específico para isso que é o &lt;strong&gt;useState()&lt;/strong&gt;. Focando no que é importante para nós, vamos nos atentar ao fato de o useState ser um método que irá, principalmente, &lt;em&gt;retornar um array, que o que nos importa são os dois primeiros elementos desse array&lt;/em&gt;.
&lt;/p&gt;

&lt;p&gt;
O primeiro elemento do nosso array será a variável que irá armazenar o valor do nosso estado inicial e quando ele for atualizado. O segundo elemento será o método responsável por atualizar o valor desse estado. &lt;em&gt;Por convenção, os nomes desses elementos são, para o primeiro, o nome do estado que é algo relacionado ao dado que irá armazenar e, para o segundo, o prefixo set seguido do nome do estado&lt;/em&gt;. FIcará mais compreensível no exemplo abaixo.
&lt;/p&gt;

&lt;p&gt;
Perceba que, diferentemente do Class Component, onde todos estados ficavam dentro do objeto &lt;strong&gt;this.state&lt;/strong&gt; e tudo era atualizado pelo &lt;strong&gt;this.setState()&lt;/strong&gt;, no Functional Component, &lt;em&gt;cada estado possui uma variável própria e terá seu método para ser atualizado&lt;/em&gt;:
&lt;/p&gt;



&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;Counter&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;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;increment&lt;/span&gt; &lt;span class="o"&gt;=&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="nx"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&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;(&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;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&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;count&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;h1&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;button&lt;/span&gt;
        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"button"&lt;/span&gt;
        &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;increment&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        Aumentar em 1
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&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;div&lt;/span&gt;&lt;span class="p"&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="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;
Perceba, também, que é passado como argumento para o useState o valor inicial da variável count.
&lt;/p&gt;

&lt;p&gt;
Sobre os ciclos de vida com o Functional Component, temos outro Hook, que é &lt;strong&gt;useEffect()&lt;/strong&gt;, ele também é um método que recebe dois argumentos, &lt;em&gt;o primeiro é a função que deve ser executada e o segundo é um array de dependências&lt;/em&gt;. 
&lt;/p&gt;

&lt;p&gt;
Dependências essas que definirão o ciclo de funcionamento do useEffect(), por exemplo, se passarmos o array vazio, ele funcionará como o componentDidMount, executando a função passada para ele apenas uma vez. Isso é ótimo para momentos que trabalhamos com requisições API para atualizar dados do nosso componente.
&lt;/p&gt;

&lt;p&gt;
Trago aqui parte do código do primeiro módulo do Ignite, trilha React, da Rocketseat como um breve exemplo de como funcionaria essa questão de utilizar o useEffect() com um ciclo de vida similar ao componentDidMount para atualizar um estado com o retorno de uma requisição API.
&lt;/p&gt;



&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;RepositoryList&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;repositories&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setRepositories&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;([]);&lt;/span&gt;

  &lt;span class="nx"&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="nx"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.github.com/orgs/rocketseat/repos&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="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;setRepositories&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&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;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;section&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;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Repositórios&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&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;section&lt;/span&gt;&lt;span class="p"&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="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;RepositoryList&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;
Esse código está incompleto em termos de funcionamento, porque precisaria explicar outros conceitos e já me alonguei nas explicações deste texto. Mas o foco dele é a sintaxe para entender o uso do useEffect().
&lt;/p&gt;

&lt;p&gt;
Se você já estudou sobre promises, async/await, você pode estar se perguntando porque o uso do .then() ao invés de o async/await. O useEffect &lt;strong&gt;&lt;em&gt;não aceita diretamente uma função assíncrona&lt;/em&gt;&lt;/strong&gt;, então se você optar por trabalhar com async/await, seria necessário fazer uma função anônima que terá em seu corpo a função assíncrona que fará a requisição, tendo algo similar a:
&lt;/p&gt;



&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;RepositoryList&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;repositories&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setRepositories&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;([]);&lt;/span&gt;

  &lt;span class="nx"&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fetchRepos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`
         https://api.github.com/orgs/rocketseat/repos`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
      &lt;span class="nx"&gt;setRepositories&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nx"&gt;fetchRepos&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;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;section&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;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Repositórios&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&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;section&lt;/span&gt;&lt;span class="p"&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="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;RepositoryList&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;
E, ao meu ver, essas são as principais diferenças entre os métodos de criação de um componente que eu me deparei até o momento. Concorda? Acredita que há mais alguma diferença relevante? Me equivoquei em alguma informação? Por favor, não hesite em colaborar com qualquer informação, meu foco é contribuir com a comunidade, mas principalmente encontrar uma forma de documentar meu aprendizado e levar minhas compreensões ao maior alcance possível, para que possamos reforçar os entendimentos corretos e reparar entendimentos errôneos.
&lt;/p&gt;



</description>
      <category>react</category>
      <category>javascript</category>
      <category>components</category>
      <category>lifecycle</category>
    </item>
    <item>
      <title>Ignite - Chapter I - ReactJs</title>
      <dc:creator>Thiago Pederzolli Machado da Silva</dc:creator>
      <pubDate>Sun, 14 Mar 2021 18:39:34 +0000</pubDate>
      <link>https://dev.to/thiagopederzolli/ignite-chapter-i-reactjs-38el</link>
      <guid>https://dev.to/thiagopederzolli/ignite-chapter-i-reactjs-38el</guid>
      <description>&lt;h4&gt;
Falaaa Dev! hahahahahah
&lt;/h4&gt;

&lt;p&gt;
Brincadeiras à parte, hoje venho compartilhar com vocês sobre meus aprendizados no fim do primeiro módulo do Ignite, trilha React. Foi uma semana de muito aprendizado, começando do básico para criar uma aplicação React do zero mesmo.
&lt;/p&gt;

&lt;p&gt;
Na primeira parte do conteúdo, o que o Diego fez foi nos conduzir através do processo de criar a aplicação React do zero para entendermos o processo de funcionamento e ter uma visão mais ampla de como pensarmos a criação de uma aplicação.
&lt;/p&gt;

&lt;p&gt;
Aprendemos sobre &lt;em&gt;Babel e Webpack&lt;/em&gt;, como configurá-los, quais informações são importantes e como elas impactam o funcionamento da aplicação. A importância da diferenciação entre ambiente de desenvolvimento e de produção. A estrutura do React.
&lt;/p&gt;

&lt;p&gt;
Na segunda parte entramos de fato na criação de componentes em React, onde foram abordados os conceitos principais de &lt;strong&gt;&lt;em&gt;componentes, propriedades e estados&lt;/em&gt;&lt;/strong&gt;. Se você quiser saber mais sobre, pode conferir esse meu texto sobre o  &lt;a href="https://dev.to/thiagopederzolli/react-e-seus-tres-mosqueteiros-4lh"&gt;React e seus três mosqueteiros.&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Ele também falou sobre a ideia de &lt;strong&gt;imutabilidade&lt;/strong&gt; no React, que é basicamente a ideia de que uma variável não deve ter seu valor alterado diretamente. Explicarei um pouco mais sobre imutabilidade em um texto que pretendo lançar ainda essa semana.
&lt;/p&gt;

&lt;p&gt;
Na terceira parte foi onde conhecemos o segundo Hook do React, o &lt;strong&gt;useEffect()&lt;/strong&gt;, que serve para que possamos criar funções a serem executadas de acordo com padrões pré-estabelecidos. Em poucas palavras, &lt;em&gt;ele recebe dois argumentos, o primeiro é uma função e o segundo é um array de dependências e essas dependências ditarão quando a função declarada no primeiro argumento será executada&lt;/em&gt;. No texto que trarei sobre imutabilidade falo um pouco mais sobre o conceito e mostro um caso de uso do useEffect().
&lt;/p&gt;

&lt;p&gt;
Na quarta e última parte do conteúdo, começamos a entrar no Fantástico mundo do TypeScript. Aprendemos a importância do TypeScript, como a questão de termos uma tipagem definida garante um funcionamento melhor da nossa aplicação, assim como também proporciona uma compreensão melhor de nosso código para quem estiver trabalhando com a gente.
&lt;/p&gt;

&lt;p&gt;
Foi explicado o básico para implementação de &lt;strong&gt;&lt;em&gt;interfaces&lt;/em&gt;&lt;/strong&gt; TypeScript, que são o que definem os tipos esperados por cada variável, garantindo assim que não possamos, por exemplo, atribuir um número a um dado que espera um objeto. Também aprendemos como implementar isso no React, garantindo uma aplicação mais inteligente e uma forma mais segura de trabalhar.
&lt;/p&gt;

&lt;p&gt;
Por fim, terminamos o módulo com um desafio focado em colocarmos em prática um dos conceitos mais importantes, ao meu ver, do React, que é justamente o de imutabilidade. Dentro de uma aplicação de lista de Tasks, era nossa tarefa implementar funções que atualizassem os estados, sem impactar diretamente o valor original daquele estado.
&lt;/p&gt;

&lt;p&gt;
A ideia dessa documentação é traçar um roteiro de tudo que foi visto a cada módulo, resumindo os principais pontos e dando uma ideia de conceitos relevantes, com a intenção de explorar em textos maiores e com mais profundidade cada conceito desses, seguindo a ideia proposta no próprio Ignite. 
&lt;/p&gt;

&lt;p&gt;
Como comentado em algumas partes, alguns conceitos já estão presentes em textos já publicados, outros em textos aguardando publicação e outros em textos que estarão por vir. 
&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
    </item>
    <item>
      <title>React e seus três mosqueteiros.</title>
      <dc:creator>Thiago Pederzolli Machado da Silva</dc:creator>
      <pubDate>Wed, 10 Mar 2021 22:53:55 +0000</pubDate>
      <link>https://dev.to/thiagopederzolli/react-e-seus-tres-mosqueteiros-4lh</link>
      <guid>https://dev.to/thiagopederzolli/react-e-seus-tres-mosqueteiros-4lh</guid>
      <description>&lt;p&gt;
Depois de muito tempo parado, por diversos motivos, estou aqui para compartilhar um pouco mais da minha jornada. Aproveitando essa nova etapa que surge na minha vida, iniciarei uma série de artigos voltados para React. Afinal é a ferramenta que uso no trabalho e onde todos meus estudos técnicos estarão direcionados.
&lt;/p&gt;

&lt;p&gt;
Como primeiro passo, vou tentar explicar resumidamente do que se trata o React e seus principais conceitos.
&lt;/p&gt;

&lt;h1&gt;
React:
&lt;/h1&gt;

&lt;p&gt;
O React é uma biblioteca UI(User Interface), ou seja, é uma ferramenta para criação de telas, o famoso front-end. Ela é uma das principais ferramentas utilizadas hoje em dia por quem utiliza JavaScript para a criação da parte visual de suas aplicações. Ela é composta por alguns conceitos essenciais de funcionalidades. Os que abordarei hoje são: componentes, propriedades e estados.
&lt;/p&gt;

&lt;p&gt;
Em relação a Componentes e Estados, vocês verão que há formas diferentes de trabalhar, eu abordarei isso em artigos específicos, falando um pouco da diferença entre Class Components e Functional Components, assim como Redux e ContextAPI, que são formas de trabalhar estado globalmente.
&lt;/p&gt;

&lt;h2&gt;
Componentes:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="o"&gt;=&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="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;button&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"button"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; Olá! Bem vindo ao Universo React&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&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="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;
A ideia de componentização é algo que deixa o React mais atrativo. É a possibilidade de quebrar sua aplicação em diversos pedaços, permitindo até mesmo utilizar o mesmo componente em diversas telas da aplicação.
&lt;/p&gt;

&lt;p&gt;
Digamos que você tem várias telas que possuem botões similares entre si, você pode criar apenas um componente de botão e chamá-lo em cada uma dessas telas.
&lt;/p&gt;

&lt;p&gt;
Outra situação clássica de uso da componentização é o Header de suas páginas, que normalmente se mantém igual em todas rotas, então você pode criá-lo como um componente só, adicioná-lo no arquivo principal de sua aplicação e assim ele irá estar presente em qualquer página que a pessoa usuária navegue.
&lt;/p&gt;

&lt;p&gt;
Essa estrutura de componentes também garante um melhor fluxo de informação e uma aplicação mais otimizada. Diferente de modelos anteriores em que você trabalhava com o HTML, CSS e JS tudo de uma forma única e precisava a cada interação do usuário, ir até o servidor, carregar esses três arquivos e trazer todas informações novamente, com React você garante que, estruturando corretamente as páginas, só será necessário se preocupar em atualizar uma parte da aplicação referente a aquela interação específica.
&lt;/p&gt;

&lt;p&gt;
Pegue o twitter web, por exemplo, se você navegar entre a seção Página Inicial e a Notificações, você perceberá que, das três colunas, apenas a central será alterada, que é a área da tela referente a interação da pessoa usuária, afinal de contas, o menu de seções e a área do “O que está acontecendo” não são impactadas pela interação.
&lt;/p&gt;

&lt;p&gt;
Isso está diretamente linkado a ideia de Single Page Application do React, onde ele é responsável exclusivamente pela parte visual, enquanto os dados e regras de negócio ficam no back-end, servindo o React através de uma API, garantindo assim que não será necessário recarregar toda a aplicação quando houver uma interação.
&lt;/p&gt;

&lt;p&gt;
Porém, você deve estar se perguntando “Ta, eu tenho um componente botão, que eu chamo em várias telas, mas e se eu quiser que a cor de fundo de um seja azul e outro tenha o fundo roxo?”
&lt;/p&gt;

&lt;p&gt;
Vamos então falar do segundo conceito.
&lt;/p&gt;

&lt;h2&gt;
Propriedades, carinhosamente conhecida como props:
&lt;/h2&gt;

&lt;p&gt;
São valores que um componente pode receber, referentes a estilização, funcionalidade ou até mesmo dados que devem ser exibidos em tela.
&lt;/p&gt;

&lt;p&gt;
Vamos continuar com o exemplo de diversos botões. Você tem lá suas várias telas e quer mudar a cor de fundo de algum botão em alguma determinada página, você primeiro precisa garantir que seu botão esteja apto a trabalhar com suas props e que elas possam, de fato, causar alguma mudança no componente do botão.
&lt;/p&gt;

&lt;p&gt;
Garantido isso, você precisa então no arquivo em que sua tela é construída, passar essa essa informação para o componente botão, você teria uma estrutura similar a esta:
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="o"&gt;=&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="o"&gt;=&amp;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;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;isDisabled&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;bgColor&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;props&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;button&lt;/span&gt; 
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"button"&lt;/span&gt;
      &lt;span class="na"&gt;disabled&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;isDisabled&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;bgColor&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;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;text&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;button&lt;/span&gt;&lt;span class="p"&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="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;
E você pode passar diversas propriedades com objetivos diferentes como havia comentado. Quando comentei ali, pensando no botão, ele tem a funcionalidades, como estar habilitado ou não, isso pode ser passado por propriedades.
&lt;/p&gt;

&lt;p&gt;
Você também pode trabalhar o texto do botão por propriedades, digamos que você tem um botão parecido em um site de compras, mas que na página inicial diz “Veja os detalhes do produto” e na página de detalhes vá dizer “Compre aqui este produto”, são outros valores que podem ser passados por propriedades.
&lt;/p&gt;

&lt;p&gt;
No componente pai do botão, sua declaração ficará assim:
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./Button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;App&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;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      Hello World
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt;
        &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Olá! Bem vindo ao Universo React"&lt;/span&gt;
        &lt;span class="na"&gt;isDisabled&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;
        &lt;span class="na"&gt;bgColor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"purple"&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;h1&lt;/span&gt;&lt;span class="p"&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="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;
E agora tu te pergunta “Tenho dois botões na mesma tela, mas quero que eles sejam exibidos em momentos diferentes, como proceder?”
&lt;/p&gt;

&lt;p&gt;
Vamos falar do último conceito de hoje:
&lt;/p&gt;

&lt;h2&gt;
Estados, ou state como verão no código:
&lt;/h2&gt;

&lt;p&gt;
O conceito de estados é um conceito muito importante no React, porque é ele que dita as regras de como muita coisa vai funcionar em sua aplicação.
&lt;/p&gt;

&lt;p&gt;
Hoje farei um apanhado de umas noções básicas pensando apenas em estados locais. Depois, quando eu abordar Redux e ContextAPI falarei de estados em um nível global de aplicação.
&lt;/p&gt;

&lt;p&gt;
Estados são formas de armazenar informações dentro do seu componente e que podem ser utilizadas para conduzir a forma que o componente irá se comportar.
&lt;/p&gt;

&lt;p&gt;
Continuando o exemplo do botão, vamos pensar em um cronômetro. Ele tem dois momentos: ativo e parado. Você pode ter um estado que vai controlar esses momentos. A partir desse estado, você pode definir uma série de fatores, como o texto que irá aparecer no botão, ou até mesmo um botão para cada momento.
&lt;/p&gt;


&lt;p&gt;Ele também terá um valor, referente ao tempo contabilizado, isso também pode ser armazenado em um estado.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;
E se a pessoa quer registrar os dados referentes ao que ela executou naquele espaço de tempo? Também é possível armazenar em um estado.
&lt;/p&gt;

&lt;p&gt;
E a partir dessas diversas informações, é possível controlar todo dinamismo de um componente, definindo através do valor de cada estado, como se espera que o componente responda. É possível fazer uma lista que exiba os dados referentes a tarefa executada, garantir que o botão tenha o texto iniciar caso o estado esteja como inativo e o texto parar caso o estado esteja como ativo.
&lt;/p&gt;

&lt;p&gt;
Abaixo temos uma ideia de como funcionaria um estado para definir qual texto será exibido na renderização do botão, caso o estado haveProps seja verdadeiro, exibe o texto que é passado por props pelo componente pai, caso seja falso, exibe o texto padrão.
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="o"&gt;=&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="o"&gt;=&amp;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;haveProps&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;SetHaveProps&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&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="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;isDisabled&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;bgColor&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;props&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;button&lt;/span&gt; 
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"button"&lt;/span&gt;
      &lt;span class="na"&gt;disabled&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;isDisabled&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;bgColor&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;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;haveProps&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Texto original&lt;/span&gt;&lt;span class="dl"&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;button&lt;/span&gt;&lt;span class="p"&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="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Então, espero que tenha ajudado a dar uma breve ideia do que é o React, como ele funciona para criação de telas, em breve venho comentar sobre diversos outros conceitos que fazem do React uma biblioteca tão utilizada nos dias atuais e como ele facilita muito algumas situações.&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>frontend</category>
      <category>introdution</category>
    </item>
    <item>
      <title>Meu primeiro freela e o caminho até ele!</title>
      <dc:creator>Thiago Pederzolli Machado da Silva</dc:creator>
      <pubDate>Mon, 18 Jan 2021 18:41:36 +0000</pubDate>
      <link>https://dev.to/thiagopederzolli/meu-primeiro-freela-e-o-caminho-ate-ele-5jn</link>
      <guid>https://dev.to/thiagopederzolli/meu-primeiro-freela-e-o-caminho-ate-ele-5jn</guid>
      <description>&lt;p&gt;
Hoje venho compartilhar com vocês como consegui meu primeiro freela.
&lt;/p&gt;

&lt;p&gt;
Isso mesmo, minha primeira oportunidade de trabalhar com desenvolvimento chegou. E os dois principais fatores que mais me deixaram feliz foi que chegou por reconhecimento e para trabalhar com o que eu realmente gosto no desenvolvimento, o Front-end.
&lt;/p&gt;

&lt;h2&gt;
A abordagem:
&lt;/h2&gt;

&lt;p&gt;
Em uma das minhas pausas de estudos, fui fazer o que qualquer dev em busca de uma oportunidade faz: conferir o Linkedin. Lá me deparei com uma mensagem perguntando se eu tinha disponibilidade para um freela.
&lt;/p&gt;

&lt;p&gt;
Na hora a alegria já era absurda, mas como tenho meus compromissos e meus objetivos, precisava saber qual era o foco do freela. Para minha total alegria, era montar telas em React com styled-components e uma lib UI que o outro Dev havia já construindo com os components que deveriam ser importados para a construção das telas.
&lt;/p&gt;

&lt;h2&gt;
Porque falo sobre reconhecimento:
&lt;/h2&gt;

&lt;p&gt;
Um dos motivos pelo qual a pessoa optou por me abordar foi por me acompanhar no Linkedin, ver minhas publicações, minha evolução, meu esforço, meu empenho em ajudar a comunidade.
&lt;/p&gt;

&lt;p&gt;
Foi extremamente gratificante ouvir isso. Pois consolida que cada vez mais o caminho que estou trilhando é o certo. Aumentando minha sede por conhecimento, engajamento e construção de valor para a comunidade.
&lt;/p&gt;

&lt;h2&gt;
Os aprendizados:
&lt;/h2&gt;

&lt;p&gt;
Listar todos aprendizados que esse projeto já vem me proporcionando e irá proporcionar seria impossível, não tem como mensurar tudo que esse trabalho irá agregar.
&lt;/p&gt;

&lt;p&gt;
Mas consigo já pontuar alguns ensinamentos que ele me trouxe de grande relevância para etapas futuras, como: React com TypeScript, Styled-components, aprofundar os conhecimentos em CSS, gitflow, conventional commits, resolução de conflitos entre branchs, comunicação e colaboração.
&lt;/p&gt;

&lt;p&gt;
Tudo isso e são poucos dias de projeto recém. Tenho certeza que esse trabalho ainda irá me agregar muito conhecimento que terei a maior honra em compartilhar com a comunidade para que, assim como eu, várias pessoas possam ter essas oportunidades na vida.
&lt;/p&gt;

&lt;h2&gt;
O que tirar desse pequeno relato?
&lt;/h2&gt;

&lt;p&gt;
Mostre-se, documente seu aprendizado e compartilhe com a comunidade. Gere valor para sua imagem, garanta que está sendo visto, participe das comunidades, esteja envolvido na evolução daqueles ao seu redor. Colabore da forma que for possível com o processo de aprendizado de alguém.
&lt;/p&gt;

&lt;p&gt;
Não se prenda porque alguém já escreveu sobre aquele conceito, procure sua forma autêntica de ser, assim você irá perceber que um conceito pode ser explicado de diversas formas e talvez a sua forma de explicar é a que vai fazer aquele conceito ter sentido para alguém que antes não compreendia.
&lt;/p&gt;

&lt;p&gt;
É o clássico caso do "Se der medo, vai com medo", mas não deixe de ir, somente assim você vai expandir sua zona de conforto, fazendo com que situações que te deixavam desconfortável não deixem mais.
&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>css</category>
    </item>
    <item>
      <title>This I Promise You - Entendendo o fluxo de Promise em JS</title>
      <dc:creator>Thiago Pederzolli Machado da Silva</dc:creator>
      <pubDate>Fri, 18 Dec 2020 12:49:16 +0000</pubDate>
      <link>https://dev.to/thiagopederzolli/this-i-promise-you-entendendo-o-fluxo-de-promise-em-js-2p49</link>
      <guid>https://dev.to/thiagopederzolli/this-i-promise-you-entendendo-o-fluxo-de-promise-em-js-2p49</guid>
      <description>&lt;p&gt;Hoje vim falar sobre promises. As promises surgem como uma alternativa para evitar o uso de muitas callbacks, que poderiam deixar o código pouco legível e para facilitar desenvolvimento de aplicações que precisem fazer requisições API.&lt;/p&gt;

&lt;p&gt;Entender Promises é fundamental para esse fluxo de desenvolvimento, porque é em Promises que o fluxo de requisições para uma API funciona. Sua aplicação faz uma requisição à API externa e essa requisição retornará uma Promise, um objeto com diversas propriedades, sendo duas delas, o sucesso e o erro.&lt;/p&gt;

&lt;h2&gt;
  
  
  API:
&lt;/h2&gt;

&lt;p&gt;API é uma forma de permitir uma aplicação se comunicar com outra, garantindo que uma aplicação que faça uma requisição possa acessar os dados de um determinado banco e trabalhar esses dados da forma que lhe agradar para exibir em sua aplicação.&lt;/p&gt;

&lt;p&gt;Pense no fluxo do Ifood, existe o aplicativo e em algum lugar está armazenado as informações sobre os produtos de um determinado restaurante, quando você clica no restaurante, ele faz uma requisição para a API que faz a comunicação com o banco de dados e retorna a Promise dessa requisição. O restaurante existindo nesse banco de dados, o Ifood lida com a propriedade sucesso dessa Promise e nessa propriedade encontram-se as informações referentes aos pratos do restaurante.&lt;/p&gt;

&lt;h2&gt;
  
  
  Promises:
&lt;/h2&gt;

&lt;p&gt;Uma promise possui três estados, &lt;em&gt;&lt;strong&gt;pending&lt;/strong&gt;&lt;/em&gt;, &lt;strong&gt;&lt;em&gt;resolved&lt;/em&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;em&gt;rejected&lt;/em&gt;&lt;/strong&gt;. &lt;strong&gt;Pending&lt;/strong&gt; é seu estágio inicial após a função que a chamou ser executada. Essa função que chamou a promise continuará sua execução até que a promise retorne algo.&lt;/p&gt;

&lt;p&gt;Essa é um dos principais motivos de usarmos tanto promises, o aguardo por seu retorno não trava a aplicação, o que não depende de seu retorno segue sendo executado e o que depende vai para uma área especial, aguardando o retorno da promise para ser executado.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resolved&lt;/strong&gt; e &lt;strong&gt;Rejected&lt;/strong&gt; referem-se ao seu retorno. Resolved é o estado de sucesso na requisição, rejected é quando houve algum problema que a Promise retorna um erro.&lt;/p&gt;

&lt;p&gt;Com promises, você garante que as callbacks dela nunca serão chamadas antes de acabar a fila atual de execuções, que as callbacks chamadas posteriormente serão executadas de acordo com o fluxo, depois da conclusão da promise e que você pode fazer um encadeamento de callbacks para determinadas ações com o que for retornado da promise.&lt;/p&gt;

&lt;h3&gt;
  
  
  Construção de uma Promise:
&lt;/h3&gt;

&lt;p&gt;Ela é feita a partir de um &lt;code&gt;Constructor&lt;/code&gt;. Constructor nada mais é que uma função especial construtora de objetos. E sim, Promise nada mais é que um objeto com duas propriedades: resolve e reject.&lt;/p&gt;

&lt;p&gt;Sua sintaxe é simples:&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;promise&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;reject&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O &lt;em&gt;new&lt;/em&gt; é um operador que garante que estaremos criando um novo objeto baseado na função passada após o operador, logo, nessa sintaxe acima, estamos definindo que a variável promise irá armazenar um novo objeto baseado no consructor Promise.&lt;/p&gt;

&lt;h3&gt;
  
  
  Resolve e Reject:
&lt;/h3&gt;

&lt;p&gt;Resolve e Reject são duas funções de retorno de uma promise. Serão as funções a serem executadas de acordo com o retorno da execução da promise. Se uma promise satisfaz a condição desejada, ela foi resolvida, logo será executado o que for passado para a função &lt;strong&gt;&lt;em&gt;resolve&lt;/em&gt;&lt;/strong&gt;, caso a condição não seja satisfeita, será rejeitada e será então executado o que for passado para a função &lt;strong&gt;&lt;em&gt;reject&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Quer ver funcionando?&lt;/p&gt;

&lt;p&gt;Abra o seu VSCode e estruture a seguinte linha de raciocínio:&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;promise&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&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="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;reject&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numberInput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;number&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;numberInput&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;10&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="nf"&gt;resolve&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Excelente, promise resolvida com sucesso&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="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;reject&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ops! Ocorreu algum erro com sua requisição, por favor, tente novamente.&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="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Entendendo o código acima:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;promise é uma função que espera um argumento ao ser chamado, esse argumento refere-se ao parâmetro number e retorna uma promise.&lt;/li&gt;
&lt;li&gt;O valor desse number é armazenado na variável numberInput.&lt;/li&gt;
&lt;li&gt;O if verifica a condição do numberInput, se ele for maior que 10.&lt;/li&gt;
&lt;li&gt;Caso o numberInput seja &lt;strong&gt;maior&lt;/strong&gt; que 10, a promise será resolvida e terá o retorno no console a frase &lt;em&gt;&lt;code&gt;“Excelente, promise resolvida com sucesso”&lt;/code&gt;&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Caso o numberInput seja &lt;strong&gt;menor&lt;/strong&gt; que 10, a promise será rejeitada e terá o retorno no console a frase &lt;em&gt;&lt;code&gt;“Ops! Ocorreu algum erro com a sua requisição, por favor, tente novamente”&lt;/code&gt;&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Chame a função passando um valor maior que 10 como argumento:&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="nf"&gt;promise&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora rode novamente o comando no seu terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node script.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ao rodar o comando, você verá que no seu terminal exibirá a seguinte mensagem:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;“Excelente, promise resolvida com sucesso”
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Altere o valor de chamada da função para um número menor que 10 e rode o comando novamente:&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="nf"&gt;promise&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node script.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;“Ops! Ocorreu algum erro com sua requisição, por favor, tente novamente”
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dessa vez o retorno foi diferente, pois não foi satisfeita a condição para que sua requisição fosse bem sucedida.&lt;/p&gt;

&lt;p&gt;Para ter uma perspectiva melhor do fluxo de uma promise, execute testes com o &lt;code&gt;Math.random()&lt;/code&gt;.&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;randomNumber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;promise&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;randomNumber&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  fetch API:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;fetch()&lt;/em&gt;&lt;/strong&gt; é a função que é executada para fazer a requisição a uma API. Ela é uma função nativa do objeto &lt;code&gt;Window&lt;/code&gt;(do seu navegador, no caso) que recebe como argumento o &lt;em&gt;&lt;code&gt;endpoint&lt;/code&gt;&lt;/em&gt;(termo utilizado para se referir ao link que deve ser utilizado para fazer a requisição para a API) e retorna a promise, resolvida ou não.&lt;/p&gt;

&lt;p&gt;Normalmente esse retorno pode vir de várias formas, aqui vamos trabalhar com API de retornos &lt;em&gt;&lt;code&gt;JSON&lt;/code&gt;&lt;/em&gt;, que é algo muito similar a um objeto JavaScript, mas para manipularmos precisará de um pequeno tratamento.&lt;/p&gt;

&lt;h2&gt;
  
  
  .then() e .catch():
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;.then()&lt;/em&gt;&lt;/strong&gt; e &lt;strong&gt;&lt;em&gt;.catch()&lt;/em&gt;&lt;/strong&gt; são as primeiras formas que tivemos de lidar com o retorno de promises. Lembrando que promises são assíncronas, mas o fluxo do nosso código não é, precisavamos de alguma forma de informar ao código que naquele bloco de código precisaria haver uma espera por uma resposta. &lt;/p&gt;

&lt;p&gt;Para isso foi desenvolvido o &lt;code&gt;.then()&lt;/code&gt;, ele faz parte de uma cadeia de encadeamento de funções, serve para tratar o retorno &lt;strong&gt;&lt;code&gt;resolvido&lt;/code&gt;&lt;/strong&gt; da promise através de uma callback functions. Em tradução literal, “then” significa &lt;code&gt;“então”&lt;/code&gt;, logo na cadeia de funções, podemos entender, com ele vindo após o fetch que a lógica será “faça a requisição, espere o retorno e &lt;code&gt;então&lt;/code&gt; execute esse código aqui”.&lt;/p&gt;

&lt;p&gt;Já o &lt;code&gt;.catch()&lt;/code&gt; serve para tratar o retorno &lt;strong&gt;&lt;code&gt;rejeitado&lt;/code&gt;&lt;/strong&gt; da promise, caso haja alguma falha no processo de requisição e ela retorne um erro, o catch, &lt;code&gt;captura&lt;/code&gt; esse erro para que você possa utilizar a mensagem de erro para tentar entender qual foi a falha ou em uma aplicação gerar alguma notificação para a pessoa usuária de porque sua solicitação não retornou algo.&lt;/p&gt;

&lt;p&gt;Vamos entender juntos esse fluxo, abra seu VScode, crie um arquivo &lt;code&gt;script.js&lt;/code&gt; em outra pasta e prepare seu ambiente para que possas trabalhar com fetch direto no VSCode:&lt;/p&gt;

&lt;p&gt;Você precisará trabalhar com uma dependência do node, chamada &lt;code&gt;node-fetch&lt;/code&gt;. Pois, como comentado na descrição do fetchAPI, ela é nativa do Objeto Window, ou seja, funciona no ambiente de navegador. Essa dependência que vamos instalar irá permitir utilizar o fetch no contexto do &lt;strong&gt;node.js&lt;/strong&gt; e verificar seu retorno no próprio VSCode.&lt;/p&gt;

&lt;p&gt;Para começar, precisamos iniciar um arquivo &lt;strong&gt;&lt;em&gt;&lt;code&gt;package.json&lt;/code&gt;&lt;/em&gt;&lt;/strong&gt; que irá armazenar as informações da dependência e permitir seu uso, para isso, rode o comando abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm init &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Feito esse procedimento, prossiga para instalação do &lt;strong&gt;&lt;em&gt;&lt;code&gt;node-fetch&lt;/code&gt;&lt;/em&gt;&lt;/strong&gt; com o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;node-fetch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Excelente! Agora seu ambiente está pronto para os primeiros experimentos com fetch. Para essa prática de fixação, utilizaremos uma API gratuita de &lt;strong&gt;&lt;em&gt;&lt;a href="http://swquotesapi.digitaljedi.dk/index.html" rel="noopener noreferrer"&gt;citações da franquia star wars&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt; que retorna elas de forma aleatória:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://swquotesapi.digitaljedi.dk/api/SWQuote/RandomStarWarsQuote
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No site acima, se copiado no seu navegador, estará o retorno que receberemos ao final do &lt;code&gt;.then()&lt;/code&gt; que irá tratar o formato do retorno do fetch. Para uma melhor visualização, indico a extensão do chrome &lt;strong&gt;&lt;em&gt;&lt;a href="https://chrome.google.com/webstore/detail/json-viewer/gbmdgpbipfallnflgajpaliibnhdgobh?hl=pt-BR" rel="noopener noreferrer"&gt;JSON Viewer&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;, que irá garantir a estrutura para visualizar no formato adequado:&lt;/p&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%2Fi.ibb.co%2Fsj18Zjw%2FJSON-viewer.jpg" 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%2Fi.ibb.co%2Fsj18Zjw%2FJSON-viewer.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Será exibido no formato acima caso seja instalada a extensão JSON Viewer.&lt;/p&gt;

&lt;p&gt;Sua primeira linha terá que solicitar a dependência, para atribuir um valor a fetch e tornar viável seu uso, logo seu código deve começar com:&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;fetch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;node-fetch&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;Feito isso, podemos desenvolver a função:&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;function&lt;/span&gt; &lt;span class="nf"&gt;SWQuote&lt;/span&gt;&lt;span class="p"&gt;()&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="s1"&gt;http://swquotesapi.digitaljedi.dk/api/SWQuote/RandomStarWarsQuote&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;quotes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;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="nx"&gt;quotes&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;SWQuotes&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ao rodar o comando &lt;code&gt;node script.js&lt;/code&gt;, teremos um objeto similar ao seguinte objeto retornado no console:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Response &lt;span class="o"&gt;{&lt;/span&gt;
  size: 0,
  &lt;span class="nb"&gt;timeout&lt;/span&gt;: 0,
  &lt;span class="o"&gt;[&lt;/span&gt;Symbol&lt;span class="o"&gt;(&lt;/span&gt;Body internals&lt;span class="o"&gt;)]&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
    body: Gunzip &lt;span class="o"&gt;{&lt;/span&gt;
      _writeState: &lt;span class="o"&gt;[&lt;/span&gt;Uint32Array],
      _readableState: &lt;span class="o"&gt;[&lt;/span&gt;ReadableState],
      readable: &lt;span class="nb"&gt;true&lt;/span&gt;,
      _events: &lt;span class="o"&gt;[&lt;/span&gt;Object: null prototype],
      _eventsCount: 6,
      _maxListeners: undefined,
      _writableState: &lt;span class="o"&gt;[&lt;/span&gt;WritableState],
      writable: &lt;span class="nb"&gt;true&lt;/span&gt;,
      allowHalfOpen: &lt;span class="nb"&gt;true&lt;/span&gt;,
      _transformState: &lt;span class="o"&gt;[&lt;/span&gt;Object],
      _hadError: &lt;span class="nb"&gt;false&lt;/span&gt;,
      bytesWritten: 0,
      _handle: &lt;span class="o"&gt;[&lt;/span&gt;Zlib],
      _outBuffer: &amp;lt;Buffer 7b 22 69 64 22 3a 35 34 2c 22 73 74 61 72 57 61 72 73 51 75 6f 74 65 22 3a 22 52 65 6d 65 6d 62 65 72 2c 20 6d 79 20 64 65 61 72 20 4f 62 69 2d 57 61 ... 16334 more bytes&amp;gt;,
      _outOffset: 0,
      _chunkSize: 16384,
      _defaultFlushFlag: 2,
      _finishFlushFlag: 2,
      _defaultFullFlushFlag: 3,
      _info: undefined,
      _level: &lt;span class="nt"&gt;-1&lt;/span&gt;,
      _strategy: 0,
      &lt;span class="o"&gt;[&lt;/span&gt;Symbol&lt;span class="o"&gt;(&lt;/span&gt;kCapture&lt;span class="o"&gt;)]&lt;/span&gt;: &lt;span class="nb"&gt;false&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;,
    disturbed: &lt;span class="nb"&gt;false&lt;/span&gt;,
    error: null
  &lt;span class="o"&gt;}&lt;/span&gt;,
  &lt;span class="o"&gt;[&lt;/span&gt;Symbol&lt;span class="o"&gt;(&lt;/span&gt;Response internals&lt;span class="o"&gt;)]&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
    url: &lt;span class="s1"&gt;'http://swquotesapi.digitaljedi.dk/api/SWQuote/RandomStarWarsQuote'&lt;/span&gt;,
    status: 200,
    statusText: &lt;span class="s1"&gt;'OK'&lt;/span&gt;,
    headers: Headers &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Symbol&lt;span class="o"&gt;(&lt;/span&gt;map&lt;span class="o"&gt;)]&lt;/span&gt;: &lt;span class="o"&gt;[&lt;/span&gt;Object: null prototype] &lt;span class="o"&gt;}&lt;/span&gt;,
    counter: 0
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora entra a questão que havia comentado sobre o tipo de retorno da requisição. Dessa forma, ela não foi tratada ainda. Mas não se preocupe, não há necessidade de entender esse objeto agora e muito menos se desesperar com essa ideia de uma lógica para tratar essa informação e obter o que desejamos. Felizmente, como realmente esse tipo de processo é rotineiro nos dias de uma pessoa desenvolvedora, já existe uma funcionalidade para isso, que é a função &lt;strong&gt;&lt;em&gt;&lt;code&gt;.json()&lt;/code&gt;&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Vamos evoluir nosso código para termos exatamente a resposta que desejamos, tratando esse primeiro objeto:&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;function&lt;/span&gt; &lt;span class="nf"&gt;SWQuote&lt;/span&gt;&lt;span class="p"&gt;()&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="s1"&gt;http://swquotesapi.digitaljedi.dk/api/SWQuote/RandomStarWarsQuote&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;quotes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;quotes&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;quote&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;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="nx"&gt;quote&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;SWQuotes&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Executando mais uma vez o comando &lt;code&gt;node script.js&lt;/code&gt;, agora você terá um retorno similar ao abaixo, dado que a API retorna citações de forma aleatória, então &lt;strong&gt;&lt;em&gt;pode não ser a mesma citação&lt;/em&gt;&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="nb"&gt;id&lt;/span&gt;: 6,
  starWarsQuote: &lt;span class="s1"&gt;'It’s the ship that made the Kessel run in less than twelve parsecs. I’ve outrun Imperial starships. Not the local bulk cruisers, mind you. I’m talking about the big Corellian ships, now. She’s fast enough for you, old man. — Han Solo'&lt;/span&gt;,
  faction: 4
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para entender então o que fizemos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;fetch()&lt;/code&gt; faz a requisição à API e retorna a promise com seu resolve e reject.&lt;/li&gt;
&lt;li&gt;O &lt;strong&gt;primeiro&lt;/strong&gt; &lt;code&gt;.then()&lt;/code&gt; pega esse retorno e faz o tratamento para json.&lt;/li&gt;
&lt;li&gt;O &lt;strong&gt;segundo&lt;/strong&gt; &lt;code&gt;.then()&lt;/code&gt; pega o retorno do tratamento e nos exibe no console como fica.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ficou faltando agora lidarmos com algum possível erro ao longo do processo de requisição. Fazemos isso com a função &lt;code&gt;.catch()&lt;/code&gt;, que será sempre a &lt;strong&gt;&lt;em&gt;&lt;code&gt;última função&lt;/code&gt;&lt;/em&gt;&lt;/strong&gt; no nosso encadeamento de funções, justamente para capturar o erro ao fim do processo e permitir que você possa manipulá-lo como achar mais adequado.&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;function&lt;/span&gt; &lt;span class="nf"&gt;SWQuote&lt;/span&gt;&lt;span class="p"&gt;()&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="s1"&gt;http://swquotesapi.diitaljedi.dk/api/SWQuote/RandomStarWarsQuote&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;quotes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;quotes&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;quote&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;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="nx"&gt;quote&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;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="nx"&gt;error&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;No código acima, perceba que foi feita uma leve alteração no link para a API, &lt;em&gt;&lt;code&gt;apagando o g em “digital”&lt;/code&gt;&lt;/em&gt; para forçar um erro. Abaixo, perceba a diferença da mensagem com o &lt;code&gt;.catch()&lt;/code&gt; para informar o erro e sem o &lt;code&gt;.catch()&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;// com o .catch&lt;span class="o"&gt;((&lt;/span&gt;error&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; console.log&lt;span class="o"&gt;(&lt;/span&gt;error&lt;span class="o"&gt;))&lt;/span&gt;
FetchError: request to http://swquotesapi.diitaljedi.dk/api/SWQuote/RandomStarWarsQuote failed, reason: getaddrinfo ENOTFOUND swquotesapi.diitaljedi.dk
    at ClientRequest.&amp;lt;anonymous&amp;gt; &lt;span class="o"&gt;(&lt;/span&gt;/media/thiago-troll/5C112506248A591C/trybe/trybe-exercises/modulo_intro_web/bloco_9/dia_2/fetch_API/node_modules/node-fetch/lib/index.js:1461:11&lt;span class="o"&gt;)&lt;/span&gt;
    at ClientRequest.emit &lt;span class="o"&gt;(&lt;/span&gt;events.js:315:20&lt;span class="o"&gt;)&lt;/span&gt;
    at Socket.socketErrorListener &lt;span class="o"&gt;(&lt;/span&gt;_http_client.js:426:9&lt;span class="o"&gt;)&lt;/span&gt;
    at Socket.emit &lt;span class="o"&gt;(&lt;/span&gt;events.js:315:20&lt;span class="o"&gt;)&lt;/span&gt;
    at emitErrorNT &lt;span class="o"&gt;(&lt;/span&gt;internal/streams/destroy.js:92:8&lt;span class="o"&gt;)&lt;/span&gt;
    at emitErrorAndCloseNT &lt;span class="o"&gt;(&lt;/span&gt;internal/streams/destroy.js:60:3&lt;span class="o"&gt;)&lt;/span&gt;
    at processTicksAndRejections &lt;span class="o"&gt;(&lt;/span&gt;internal/process/task_queues.js:84:21&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="nb"&gt;type&lt;/span&gt;: &lt;span class="s1"&gt;'system'&lt;/span&gt;,
  errno: &lt;span class="s1"&gt;'ENOTFOUND'&lt;/span&gt;,
  code: &lt;span class="s1"&gt;'ENOTFOUND'&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;// sem o .catch&lt;span class="o"&gt;((&lt;/span&gt;error&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; console.log&lt;span class="o"&gt;(&lt;/span&gt;error&lt;span class="o"&gt;))&lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;node:117135&lt;span class="o"&gt;)&lt;/span&gt; UnhandledPromiseRejectionWarning: FetchError: request to http://swquotesapi.diitaljedi.dk/api/SWQuote/RandomStarWarsQuote failed, reason: getaddrinfo ENOTFOUND swquotesapi.diitaljedi.dk
    at ClientRequest.&amp;lt;anonymous&amp;gt; &lt;span class="o"&gt;(&lt;/span&gt;/media/thiago-troll/5C112506248A591C/trybe/trybe-exercises/modulo_intro_web/bloco_9/dia_2/fetch_API/node_modules/node-fetch/lib/index.js:1461:11&lt;span class="o"&gt;)&lt;/span&gt;
    at ClientRequest.emit &lt;span class="o"&gt;(&lt;/span&gt;events.js:315:20&lt;span class="o"&gt;)&lt;/span&gt;
    at Socket.socketErrorListener &lt;span class="o"&gt;(&lt;/span&gt;_http_client.js:426:9&lt;span class="o"&gt;)&lt;/span&gt;
    at Socket.emit &lt;span class="o"&gt;(&lt;/span&gt;events.js:315:20&lt;span class="o"&gt;)&lt;/span&gt;
    at emitErrorNT &lt;span class="o"&gt;(&lt;/span&gt;internal/streams/destroy.js:92:8&lt;span class="o"&gt;)&lt;/span&gt;
    at emitErrorAndCloseNT &lt;span class="o"&gt;(&lt;/span&gt;internal/streams/destroy.js:60:3&lt;span class="o"&gt;)&lt;/span&gt;
    at processTicksAndRejections &lt;span class="o"&gt;(&lt;/span&gt;internal/process/task_queues.js:84:21&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;node:117135&lt;span class="o"&gt;)&lt;/span&gt; UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async &lt;span class="k"&gt;function &lt;/span&gt;without a catch block, or by rejecting a promise which was not handled with .catch&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; To terminate the node process on unhandled promise rejection, use the CLI flag &lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nt"&gt;--unhandled-rejections&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;strict&lt;span class="sb"&gt;`&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;rejection &lt;span class="nb"&gt;id&lt;/span&gt;: 1&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;node:117135&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero &lt;span class="nb"&gt;exit &lt;/span&gt;code.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E você pode tratar ainda mais esse erro, altere seu código para:&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;function&lt;/span&gt; &lt;span class="nf"&gt;SWQuote&lt;/span&gt;&lt;span class="p"&gt;()&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="s1"&gt;http://swquotesapi.diitaljedi.dk/api/SWQuote/RandomStarWarsQuote&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;quotes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;quotes&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;quote&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;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="nx"&gt;quote&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;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="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&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;Ao rodar o comando, você receberá um retorno similar a este:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;request to http://swquotesapi.diitaljedi.dk/api/SWQuote/RandomStarWarsQuote failed, reason: getaddrinfo ENOTFOUND swquotesapi.diitaljedi.dk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  async/await:
&lt;/h2&gt;

&lt;p&gt;Com a evolução da linguagem, a partir do &lt;em&gt;ES2017&lt;/em&gt;, surge o &lt;strong&gt;&lt;em&gt;&lt;code&gt;async/await&lt;/code&gt;&lt;/em&gt;&lt;/strong&gt;. Que é uma sintaxe mais confortável de se trabalhar com requisições assíncronas, ela acaba com essa verbosidade da cadeia de vários &lt;code&gt;.then()&lt;/code&gt; e permite uma sintaxe por linhas, deixando a legibilidade do código mais agradável.&lt;/p&gt;

&lt;p&gt;Podemos pegar a função desenvolvida acima com .then() e refatorá-la para async/await, ficando da seguinte maneira:&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="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;SWQuotes&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="nx"&gt;quotes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&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="s1"&gt;http://swquotesapi.digitaljedi.dk/api/SWQuote/RandomStarWarsQuote&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;quote&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;quotes&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="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="nx"&gt;quote&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;SWQuotes&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você pode rodar o &lt;code&gt;node script.js&lt;/code&gt; e verá que o retorno continua similar ao que tinha antes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="nb"&gt;id&lt;/span&gt;: 12,
  starWarsQuote: &lt;span class="s1"&gt;'I sense something. A presence I have not felt since…. (A New Hope) - Darth Vader'&lt;/span&gt;,
  faction: 1
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Entendendo o código acima:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A declaração &lt;strong&gt;&lt;em&gt;&lt;code&gt;async&lt;/code&gt;&lt;/em&gt;&lt;/strong&gt; antes da função informa ao script que a função que vem a seguir é de caráter assíncrono e irá aguardar o retorno de algo para prosseguir com sua execução.&lt;/li&gt;
&lt;li&gt;A declaração de &lt;strong&gt;&lt;em&gt;&lt;code&gt;await&lt;/code&gt;&lt;/em&gt;&lt;/strong&gt; antes do &lt;code&gt;fetch()&lt;/code&gt; e do tratamento do JSON tem o mesmo significado. Em tradução livre, &lt;strong&gt;&lt;em&gt;&lt;code&gt;await&lt;/code&gt;&lt;/em&gt;&lt;/strong&gt; pode significar &lt;code&gt;aguardar&lt;/code&gt;. O que ele faz é informar ao código que, para atribuir o valor a variável quotes e quote, ele deve aguardar a resolução do que está sendo realizado após o &lt;strong&gt;&lt;em&gt;&lt;code&gt;await&lt;/code&gt;&lt;/em&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agora você deve estar se perguntando como lidar com erros com essa sintaxe. Ai que entra um outro bloco que é o &lt;strong&gt;&lt;em&gt;&lt;code&gt;try/catch&lt;/code&gt;&lt;/em&gt;&lt;/strong&gt;. É uma sintaxe onde o &lt;code&gt;try&lt;/code&gt; vai ser responsável pelo &lt;code&gt;sucesso&lt;/code&gt; e o &lt;code&gt;catch&lt;/code&gt; segue responsável pela &lt;code&gt;captura do erro&lt;/code&gt;.&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="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;SWQuotes&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;quotes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&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="s1"&gt;http://swquotesapi.digitaljedi.dk/api/SWQuote/RandomStarWarsQuote&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;quote&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;quotes&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="k"&gt;return&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="nx"&gt;quote&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&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="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="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&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="nc"&gt;SWQuotes&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 esse código, você irá obter sucesso na requisição e terá como retorno uma mensagem similar a de quando usou o &lt;code&gt;.then()&lt;/code&gt; ou quando usou o &lt;code&gt;async/await&lt;/code&gt; sem o &lt;code&gt;try/catch&lt;/code&gt;, que será:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="nb"&gt;id&lt;/span&gt;: 53,
  starWarsQuote: &lt;span class="s1"&gt;'An object cannot make you good or evil. The temptation of power, forbidden knowledge, even the desire to do good can lead some down that path. But only you can change yourself. — Bendu'&lt;/span&gt;,
  faction: 2
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora se repetirmos o mesmo erro do exemplo da parte do conteúdo de &lt;code&gt;.catch()&lt;/code&gt;, &lt;strong&gt;&lt;em&gt;&lt;code&gt;apagando o g em digital&lt;/code&gt;&lt;/em&gt;&lt;/strong&gt;, o código ficará assim:&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="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;SWQuotes&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;quotes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&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="s1"&gt;http://swquotesapi.diitaljedi.dk/api/SWQuote/RandomStarWarsQuote&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;quote&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;quotes&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="k"&gt;return&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="nx"&gt;quote&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&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="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="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&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="nc"&gt;SWQuotes&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Teremos o mesmo retorno de quando usamos o &lt;code&gt;.catch()&lt;/code&gt; encadeado com as funções &lt;code&gt;.then()&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;request to http://swquotesapi.diitaljedi.dk/api/SWQuote/RandomStarWarsQuote failed, reason: getaddrinfo ENOTFOUND swquotesapi.diitaljedi.dk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Espero ter ajudadao a compreender melhor um fluxo tão importante no nosso cenário. Mas também entenda que será algo constante nos seus dias, logo, se não compreendeu totalmente, a prática no seu dia-a-dia vai lhe ajudar a absorver o conceito.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>tutorial</category>
      <category>learning</category>
      <category>promises</category>
    </item>
    <item>
      <title>Recebidos com R de Reconhecimento.</title>
      <dc:creator>Thiago Pederzolli Machado da Silva</dc:creator>
      <pubDate>Tue, 08 Dec 2020 20:58:33 +0000</pubDate>
      <link>https://dev.to/thiagopederzolli/recebidos-com-r-de-reconhecimento-3ahh</link>
      <guid>https://dev.to/thiagopederzolli/recebidos-com-r-de-reconhecimento-3ahh</guid>
      <description>&lt;p&gt;
Hoje vou contar um pouco mais da minha história, porque hoje foi dia de Recebidinhos. Mas são recebidinhos que, para mim, representam muito mais que um mimo. Representam os sentimentos de pertencimento e reconhecimento.
&lt;/p&gt;

&lt;p&gt;
Muito falei de adaptabilidade na minha participação da Expansion Week, porque venho de  uma vida de processos onde a adaptação era o requisito básico de sobrevivência. Filho de professores municipários, fui bolsista em escola particular entre filhos de médicos, juízes, pecuaristas. Depois era um metaleiro dentro da faculdade de Educação Física, onde majoritariamente reinava o pagode. Por fim, na psicologia voltava o contexto do colégio, bolsista em Universidade Particular e depois de formado entrando na psicanálise e me deparando com um dos contextos mais elitistas que me deparei na vida. Sem contar a exclusão clássica por sempre estar acima do peso.
&lt;/p&gt;

&lt;p&gt;
Transitando entre esses cenários foi que fui aprendendo melhor a ler e interpretar as pessoas, me adaptar, conseguir captar sinais que passavam despercebido por diversas outras pessoas. Sempre em busca de um pertencer onde eu pudesse ser autêntico, mas era complicado ter assunto quando tu passou as férias na própria cidade jogando bola com os vizinhos e teus colegas foram passar um tempo na Europa, ou então querer sair com a turma de faculdade e não saber nem o “Dois pra lá, dois pra cá”.
&lt;/p&gt;

&lt;p&gt;
Na psicologia eu havia encontrado satisfação profissional, gosto muito do trabalho que faço na clínica e o impacto que causava. Mas a comunidade nunca me gerou a sensação de pertencimento. Aqui onde vivo é um contexto conservador, cheio de preconceito, conduzido por pessoas que aparecem apenas para alimentar o próprio ego. E quem me acompanha sabe o meu jeito de ser e o quanto isso me deixava mal.
&lt;/p&gt;

&lt;p&gt;
Veio a pandemia e precisei me reinventar, ingressei na programação mais pelo que vi da comunidade do que pela satisfação do primeiro ‘Hello World’. E olha que a satisfação dos primeiros códigos foi absurda!
&lt;/p&gt;

&lt;p&gt;
E conforme ia avançando nesse universo, a satisfação ia aumentando. Cada novo vínculo construído através da minha autenticidade reforçava essa sensação de pertencer. Eu sempre amei escrever e ajudar os outros. A programação tornou viável eu unir os dois.
&lt;/p&gt;

&lt;p&gt;
Como eu comentei na Expansion Week, a educação e o poder transformador que ela tem, na minha família, é ensinado antes de a gente aprender a falar e andar. A comunidade de programação me trouxe sentimentos incríveis e que me impulsionaram a ser eu mesmo, a me impor novos desafios, crescer e encontrar várias outras formas de contribuir com a evolução de outras pessoas.
&lt;/p&gt;

&lt;p&gt;
Como também sou humano, lido com meus impostores todos os dias e nesse cenário não seria diferente. Felizmente eu encontrei pessoas incríveis ao longo da minha trajetória e essa empresa sensacional. O pertencimento ao Space Squad, cercado por pessoas que eu admiro imensamente e são exemplos para mim, gera o reconhecimento que me ajudam a derrotar meus impostores para seguir produzindo, agregando valor à comunidade e tentando cada vez expandir minha zona de conforto para inovar na forma de ajudar as pessoas a sentirem-se tão realizadas quanto venho me sentindo nesse processo.
&lt;/p&gt;

&lt;p&gt;
Obrigado a galera que direta ou indiretamente sempre me ajudou com essa evolução constante, revisando meus artigos, dando feedback, estudando junto, indicando leituras, tirando dúvidas.
&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Prototype: o que é, do que se alimenta e como nos ajudam.</title>
      <dc:creator>Thiago Pederzolli Machado da Silva</dc:creator>
      <pubDate>Sun, 06 Dec 2020 15:17:16 +0000</pubDate>
      <link>https://dev.to/thiagopederzolli/prototype-o-que-e-do-que-se-alimenta-e-como-nos-ajudam-7a3</link>
      <guid>https://dev.to/thiagopederzolli/prototype-o-que-e-do-que-se-alimenta-e-como-nos-ajudam-7a3</guid>
      <description>&lt;h3&gt;&lt;em&gt;Quem nunca quebrou a cabeça tentando entender o tal do Object.prototypes?&lt;/em&gt;&lt;/h3&gt;

&lt;p&gt;
Então, na incerteza se eu realmente entendi, venho aqui tentar escrever um pouco sobre para compartilhar minha compreensão, tentar ajudar quem está com a mesma dificuldade e criar uma oportunidade de quem realmente entende me explicar se compreendi corretamente.
&lt;/p&gt;

&lt;p&gt;
Prototypes é um objeto de métodos herdados através de uma Função Construtora. Ele traz consigo todos métodos herdados do constructor Object e ao criarmos uma nova Função Construtora podemos criar novos prototypes para ela que serão herdados por objetos criados a partir dela e terão acesso a partir da chave &lt;strong&gt;__proto__&lt;/strong&gt;.
&lt;/p&gt;

&lt;p&gt;
Para mim, o exemplo que deixou mais explícito o encadeamento de prototypes é a Função Construtora String, responsável pela criação das variáveis de tipo string. Ao verificarmos seu prototype, nos deparamos com um objeto com vários métodos que estamos acostumados a utilizar para manipular strings em nossas aplicações.
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// retorno de um console.log(String.prototype);&lt;/span&gt;

&lt;span class="nb"&gt;String&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;anchor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;big&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;blink&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nl"&gt;anchor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;anchor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;big&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;big&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;blink&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;blink&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;bold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;bold&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;charAt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;charAt&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;charCodeAt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;charCodeAt&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;codePointAt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;codePointAt&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;endsWith&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;endsWith&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;fixed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;fixed&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;fontcolor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;fontcolor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;fontsize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;fontsize&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;indexOf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;indexOf&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;italics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;italics&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;lastIndexOf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;lastIndexOf&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;localeCompare&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;localeCompare&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;match&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;match&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;matchAll&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;matchAll&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;normalize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;normalize&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;padEnd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;padEnd&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;padStart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;padStart&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;repeat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;repeat&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;replaceAll&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;replaceAll&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;search&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;search&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;small&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;small&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;split&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;split&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;startsWith&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;startsWith&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;strike&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;strike&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;substring&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;substring&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;sup&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;sup&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;toLocaleLowerCase&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;toLocaleLowerCase&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;toLocaleUpperCase&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;toLocaleUpperCase&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;toLowerCase&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;toLowerCase&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;trim&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;trim&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;trimEnd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;trimEnd&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;trimLeft&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;trimStart&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;trimRight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;trimEnd&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;trimStart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;trimStart&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;valueOf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;valueOf&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nb"&gt;Symbol&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Symbol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;iterator&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;Symbol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;iterator&lt;/span&gt;&lt;span class="p"&gt;]()&lt;/span&gt;
&lt;span class="nx"&gt;__proto__&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;
Se observarmos bem, a última chave de String.prototype é a __proto__, se olharmos seu conteúdo, veremos que nada mais é que o prototype de Object:
&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;__proto__&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;hasOwnProperty&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;hasOwnProperty&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;isPrototypeOf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;isPrototypeOf&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;propertyIsEnumerable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;propertyIsEnumerable&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;toLocaleString&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;toLocaleString&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;valueOf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;valueOf&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;__defineGetter__&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;__defineGetter__&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;__defineSetter__&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;__defineSetter__&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;__lookupGetter__&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;__lookupGetter__&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;__lookupSetter__&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;__lookupSetter__&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="nx"&gt;__proto__&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;__proto__&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="kd"&gt;set&lt;/span&gt; &lt;span class="nx"&gt;__proto__&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;__proto__&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;
Ainda fica um pouco confuso né? Mas então, acompanha comigo o seguinte teste: abra o console do seu navegador através do inspecionar e digite "name".__proto__.
&lt;/p&gt;

&lt;p&gt;
Viu? Ele vai te retornar o mesmo encadeamento de prototypes. Primeiro a da Função Construtora String, responsável pela criação do objeto "name", mas lá no final, ele vai ter também outra chave __proto__ que se você abrir, vai ter os mesmos métodos que a String.prototype tinha em __proto__ que foram herdados do Object.prototype.
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;__proto__&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="nb"&gt;String&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;anchor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;big&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;blink&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nl"&gt;anchor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;anchor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;big&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;big&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;blink&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;blink&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;bold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;bold&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;charAt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;charAt&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;charCodeAt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;charCodeAt&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;codePointAt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;codePointAt&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;

&lt;span class="nx"&gt;__proto__&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;hasOwnProperty&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;hasOwnProperty&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;isPrototypeOf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;isPrototypeOf&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;propertyIsEnumerable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;propertyIsEnumerable&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;toLocaleString&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;toLocaleString&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;valueOf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;valueOf&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;
Começou a fazer sentido? Que tal criarmos uma Função Construtora para tentar compreender melhor?
&lt;/p&gt;

&lt;p&gt; Vamos criar uma Função Construtora sobre Banda, eu farei com a minha favorita, mas podes criar com as informações da tua!
&lt;/p&gt;

&lt;p&gt;
Comecemos pela função:
&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;function&lt;/span&gt; &lt;span class="nx"&gt;Banda&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;album&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ano&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nome&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;album&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;album&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ano&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ano&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;
Com a Função Construtora criada, é hora de criarmos um método diretamente nela para depois entendermos o fluxo de prototypes e como podemos criar prototypes para essa Função Construtora. Adicione à sua função o seguinte método:
&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;function&lt;/span&gt; &lt;span class="nx"&gt;Banda&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;album&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ano&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nome&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;album&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;album&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ano&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ano&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lancamento&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&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="s2"&gt;`O &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;album&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; foi lançado em &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ano&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;
Agora é hora de criarmos nossa nova banda, você pode preencher com as informações referentes ao álbum favorito de sua banda favorita.
&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;blindGuardian&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Banda&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Blind Guardian&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="s1"&gt;Nightfall in Middle-Earth&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="mi"&gt;1998&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;
Função Construtora criada, banda criada. Vamos executar o método que criamos, com as informações da banda criada e ver o que seu retorno nos trará? Coloque a execução em um console.log e veja o retorno, será parecido com o código abaixo:
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// console.log(blindGuardian.lancamento()) retornará:&lt;/span&gt;

&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;O Nightfall in Middle-Earth foi lançado em 1998&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;
Entendido a Função Construtora? Então vamos partir para a questão de prototypes. Ao desenvolver uma função construtora, podemos, depois de ela pronta, adicionar novos métodos à ela após sua criação. É aqui que o prototypes entra, essa criação de novos métodos se dará via prototypes.
&lt;/p&gt;

&lt;p&gt;
Vamos criar um método que apresente um pouco de informações sobre o álbum que passamos. Perceba, no código abaixo, que para adicionar novos métodos à Função Construtora, precisamos declarar o nome do Construtor, a chave proptype e então o nome que queremos dar ao novo método. Depois atribuimos como valor uma função anônima que será executada quando o método for chamado.
&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;Banda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sobre&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&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="s2"&gt;`O &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;album&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; da banda &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; foi o sexto de sua trajetória, baseado no livro O Silmarilion, de Tolkien`&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;
Agora temos alguns console.log para verificarmos!
&lt;/p&gt;

&lt;p&gt;
Comecemos pelo prototype do nosso Construtor, veja que ele vai retornar um objeto com o método sobre e a chave __proto__ que irá conter os prototypes herdados do Object.
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// console.log(Banda.prototype); retornará:&lt;/span&gt;
&lt;span class="nx"&gt;sobre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;Banda&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;album&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ano&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;__proto__&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;hasOwnProperty&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;hasOwnProperty&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;isPrototypeOf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;isPrototypeOf&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;propertyIsEnumerable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;propertyIsEnumerable&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;toLocaleString&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;toLocaleString&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;valueOf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;valueOf&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;__defineGetter__&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;__defineGetter__&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;__defineSetter__&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;__defineSetter__&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;__lookupGetter__&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;__lookupGetter__&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;__lookupSetter__&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;__lookupSetter__&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="nx"&gt;__proto__&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;__proto__&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="kd"&gt;set&lt;/span&gt; &lt;span class="nx"&gt;__proto__&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;__proto__&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;
Imagino que você possa estar se perguntando: "Ta, então agora eu posso acessar o prototype da minha banda". E, lamento informar, se você tentar isso, terá que lidar com uma frustração.
&lt;/p&gt;

&lt;p&gt;
Se você tentar realizar um console.log na banda que você criou, o retorno será undefined. Porque o prototype estará relacionado exclusivamente a Função Construtora.
&lt;/p&gt;

&lt;p&gt;
Ta, Thiago, mas então como ver os prototypes herdados da minha banda então? Como citado lá no começo do conteúdo, através da chave __proto__.
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// console.log(blindGuardian.prototype); retornará:&lt;/span&gt;

&lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// console.log(blindGuardian.__proto__); retornará:&lt;/span&gt;
&lt;span class="nl"&gt;sobre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;Banda&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;album&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ano&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;__proto__&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;hasOwnProperty&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;hasOwnProperty&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;isPrototypeOf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;isPrototypeOf&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;propertyIsEnumerable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;propertyIsEnumerable&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;toLocaleString&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;toLocaleString&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;valueOf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;valueOf&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;__defineGetter__&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;__defineGetter__&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;__defineSetter__&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;__defineSetter__&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;__lookupGetter__&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;__lookupGetter__&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;__lookupSetter__&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;__lookupSetter__&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="nx"&gt;__proto__&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;__proto__&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="kd"&gt;set&lt;/span&gt; &lt;span class="nx"&gt;__proto__&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ƒ&lt;/span&gt; &lt;span class="nx"&gt;__proto__&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;
Um último detalhe a se atentar sobre prototypes é que elas são secundárias a métodos criados diretamente na Função Construtora.
&lt;/p&gt;

&lt;p&gt;
O que quero dizer com isso é que, se criarmos o código abaixo, por exemplo:
&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;Banda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lancamento&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&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="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;album&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; foi o sexto lançamento da banda &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&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 após ele tentarmos executar o método lancamento para nossa banda, o retorno ainda será o seguinte:
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// console.log(blindGuardian.lancamento()) retornará:&lt;/span&gt;

&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;O Nightfall in Middle-Earth foi lançado em 1998&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;
Isso ocorre porque primeiro o leitor do código irá procurar pelo método diretamente na Função Construtora, somente se não for encontrado um método com aquela chave, que ele irá partir para os prototypes em busca de um método com aquela chave.
&lt;/p&gt;

&lt;p&gt;
Porém, isso não quer dizer que você deve tentar acessar diretamente o __proto__, porque ele é algo herdado do Construtor que não passou pela criação do novo objeto, por consequência, ele não terá acesso aos valores do novo objeto.
&lt;/p&gt;

&lt;p&gt;
Se voltarmos ao exemplo de String, podemos ver isso em ação:
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;__proto__&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;a&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="s1"&gt;b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// retornará "";&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;
Isso ocorre porque a chave __proto__ não passou pela construção da string "name", logo ela não possui valor algum para fazer a substituição.
&lt;/p&gt;

&lt;h3&gt; Concluindo &lt;/h3&gt;

&lt;p&gt; A partir do String.prototype, podemos definir que prototypes são os métodos herdados através de uma Função Construtora que nos ajudam a interagir com novos objetos criados através dela.
&lt;/p&gt;

&lt;p&gt;
Ressalto esse exemplo, porque quem aqui não fez um .toLowerCase(), um .replace() ou um .length.
&lt;/p&gt;

&lt;p&gt;
Espero que essa leitura e essa prática tenha ajudado a compreender o conceito de prototype. Porque, como puderam perceber, é algo fundamental, que quando percebemos o que representa é que conseguimos ver que está presente no nosso dia-a-dia e isso, para mim, facilitou muito o entendimento.
&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Manipulando e Trabalhando com Arrays.</title>
      <dc:creator>Thiago Pederzolli Machado da Silva</dc:creator>
      <pubDate>Thu, 12 Nov 2020 23:30:41 +0000</pubDate>
      <link>https://dev.to/thiagopederzolli/manipulando-e-trabalhando-com-arrays-l4l</link>
      <guid>https://dev.to/thiagopederzolli/manipulando-e-trabalhando-com-arrays-l4l</guid>
      <description>&lt;p&gt;
Um conteúdo que tem sido constante nos meus estudos, principalmente agora entrando em React, são os arrays.
&lt;/p&gt;

&lt;p&gt;
Saber manipular arrays é algo muito importante porque é uma das principais formas que teremos para trabalhar os dados que nossas aplicações receberão. Um array é representado por colchetes [ ] e pode armazenar praticamente todo tipo de informação: strings, numbers, objects.
&lt;/p&gt;

&lt;p&gt;
São diversas as formas que eles podem ser manipulados, mas essas formas merecem suas devidas atenções, porque algumas podem alterar seu array original e muitas das vezes você não vai querer isso.
&lt;/p&gt;

&lt;p&gt;
Um detalhe que deve se ter atenção são os array-like, principalmente na hora de manipular o DOM, como a NodeList retornada pelo document.querySelectorAll() e as HTMLCollection retornadas por document.getElementsBy...().
&lt;/p&gt;

&lt;p&gt;
Se você abrir o console do seu navegador e procurar o prototype de um Array, de uma NodeList e de um HTMLCollection você verá que o retorno será diferente e nem todos eles compartilham dos mesmos métodos, então em algum momento você poderá precisar do Array.from(), que irá converter um array-like em um array e permitir que você use os métodos de array.
&lt;/p&gt;

&lt;p&gt;
Mas cuidado, analise bem o quanto realmente essa transformação é necessária e o quanto ela irá impactar sua aplicação.
&lt;/p&gt;

&lt;h2&gt;Acessando elementos de um array:&lt;/h2&gt;

&lt;p&gt;
Um array, como falei, é um conjunto de elementos armazenados dentro de colchetes. Você pode acessar algum elemento específico dele através do nome da variável onde ele está armazenado e a posição que ele se encontra no array.
&lt;/p&gt;

&lt;p&gt;
Lembrando que o array sempre começa na posição zero, ou seja:
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const idades = [32,21,33,43,1,12,8];

idades[0] = 32;

idades[3] = 43;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Manterei esse array acima como base para os exemplos a seguir no artigo.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;
Caso você tenha um array muito grande e você quer acessar um elemento que sabe que está lá, mas não sabe a posição, pode usar o método indexOf:
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;idades.indexOf(12) irá retornar 5;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;Manipulação de arrays:&lt;/h2&gt;

&lt;h3&gt;Métodos que modificam o array original:&lt;/h3&gt;

&lt;p&gt;
Como falei acima, alguns métodos se aplicados irão mexer na estrutura do array original e devem ser utilizados com muita sabedoria.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;sort()&lt;/strong&gt;: É um método de ordenação, ele irá ordenar sempre a partir do primeiro valor de cada elemento, ou seja, um array de numbers ficará um pouco bagunçado se o método for chamado sem argumento algum.
&lt;/p&gt;

&lt;p&gt;
O sort irá percorrer todos os números pegando primeiro o valor de cada elemento. É como se ele pegasse fizesse um idades[0][0],  idades[1][0],  idades[2][0],  idades[3][0],  idades[4][0],  idades[5][0],  idades[6][0]. 
&lt;/p&gt;

&lt;p&gt;
Para que ele consiga ordenar por completo, precisamos passar como argumento do sort, uma arrow function que irá fazer um cálculo e a partir dele ordenar os números com um todo:
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;idades.sort() = [1, 12, 21, 32, 33, 43, 8];
idades.sort((a,b) =&amp;gt; a - b) = [1, 8, 12, 21, 32, 33, 43];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;
Mas o que essa função faz? Ela basicamente pega o primeiro e o segundo elemento e faz uma subtração, caso o valor dê negativo, ela troca a ordem dos elementos. Depois faz com o segundo e o terceiro e assim vai até percorrer todo o array. Essa ação será realizada até que o array seja percorrido por completo e nenhum dos cálculos retorne algum valor negativo.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;unshift() e push()&lt;/strong&gt;: São dois métodos de adição de elementos em array e que retornam o length(quantidade de itens dentro de um array). O unshift() irá adicionar um elemento ao início do array enquanto o push() adicionará ao final do Array.
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;idades.unshift(14) retornará 8 que é o length de idades com um elemento a mais e idades será:
idades = [14,32,21,33,43, 1,12,8];
idades.push(5) retornará 9 que é o length de idades após o unsifht mais o push e o idades será:
idades = [14, 32,21,33,43,1,12,8, 5];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;
&lt;strong&gt;shift() e pop()&lt;/strong&gt;: São dois métodos de remoção de elementos do array. O shift() remove o primeiro elemento e retorna ele. O pop() remove o último e retorna ele.
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;idades.shift() retornará 32;
idades.pop() retornará 8;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;
&lt;strong&gt;reverse()&lt;/strong&gt;: inverte a ordem dos elementos dentro de um array. 
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;idades.reverse() retornará [8,12,1,43,33,21,32];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;
&lt;strong&gt;splice(index, remover, item1, item2,...)&lt;/strong&gt;: ele irá manipular removendo itens e adicionando novos e retorna um array com os itens removidos. Index refere-se a posição inicial em que o splice começar a funcionar, remover refere-se a quantidade de elementos a serem removidos a partir daquela posição e os outros argumentos referem-se a itens que serão adicionados.
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;idades.splice(1, 2, 38, 24) retornará [21, 33];
idades = [32, 38, 24, 43,1,12,8];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
Métodos que criam novos arrays a partir de um original:
&lt;/h3&gt;

&lt;p&gt;
&lt;strong&gt;concat()&lt;/strong&gt;: concatena um array com os valores passados como argumento
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const novasIdades = idades.concat(44);
novasIdades = [32,21,33,43,1,12,8, 44];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;
&lt;strong&gt;join(separador)&lt;/strong&gt;: pega o array e transforma em uma string unindo pelo que for passado como argumento separador. 
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const joinIdades = idades.join(‘-’);
joinIdades = “32-21-33-43-1-12-8”;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;
&lt;strong&gt;slice(início, final)&lt;/strong&gt;: pega o array e, como o nome diz, fatia da posição início até a posição final. Se passado apenas um valor de argumento, ele irá considerar como valor de início e irá fatiar o array daquela posição até o final. Se você quiser clonar um array, pode usar o slice sem nenhum argumento.
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const sliceIdades = idades.slice(1, 3);
sliceIdades = [21,33, 43];

const sliceIdadesUmArg = idades.slice(2);
sliceIdadesUmArg = 33,43,1,12,8];

const cloneIdades = idades.slice();
cloneIdades = [32,21,33,43,1,12,8];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;
Bom, já sabemos como manipular um array. Agora precisamos trabalhar com eles. Para isso possuímos diversos métodos.
&lt;/p&gt;

&lt;p&gt;
A ideia desses métodos é que eles possam fazer uma ação que irá se repetir para cada elemento do array. Cada método nos será útil para algo, temos alguns para executar uma ação que fará alguma alteração, outro nos retornará um novo elemento com informações desse outro array, temos também métodos para pesquisar nesses arrays e retornar só o que nos interessar. Vamos ver um pouco disso agora.
&lt;/p&gt;

&lt;p&gt;
Primeiro falaremos do &lt;strong&gt;forEach(callback(itemAtual, index, Array))&lt;/strong&gt;. Ele serve para percorrermos um array e fazer alguma alteração, implementar algo. Imagine que você está manipulando seu DOM, tem uma série de botões de Adicionar ao Carrinho e quer que todos botões tenham a mesma função:


```
const buttons = document.querySelectorAll(‘button’)

buttons.forEach((button) =&amp;gt;  {
button.addEventListener(‘click’, funcaoASerExecutada)
});
```


&lt;/p&gt;
&lt;p&gt;
Ele não modifica o array original, caso você queira fazer essas mudanças, precisa informar todos os argumentos e iterar a partir do array:
&lt;/p&gt;

&lt;p&gt;
Imagine que você tem aquele array de idades e quer transformar cada elemento em uma string informando que se tratam realmente de idades:
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;idades.forEach((idade, index, array) =&amp;gt; { array[index] = idade + ' anos'});

idades = ["32 anos", "21 anos", "33 anos", "43 anos", "1 anos", "12 anos", "8 anos"];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;
O objetivo do forEach não é o retorno em si do método, mas o que será feito com cada item em cada iteração, por isso seu retorno sempre será undefined.
&lt;/p&gt;

&lt;p&gt;
Agora o &lt;strong&gt;map(callback(itemAtual, index, array))&lt;/strong&gt;, tem a mesma premissa do forEach, a diferença está no objetivo, o objetivo do map é sim o retorno de um novo array.
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const idadeComAnos = idades.map((idade) =&amp;gt; {
return idade + ‘ anos’;
});

idadeComAnos = ["32 anos", "21 anos", "33 anos", "43 anos", "1 anos", "12 anos", "8 anos"];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;
O map() é muito útil para trabalharmos com arrays de objetos(algo que vamos nos deparar muito).
Suponha que você precise isolar uma propriedade de cada um dos objetos.
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const alunos = [
    {
        nome: ‘Thiago’,
        conteúdo: ‘React’,
    },
    {
        nome: ‘Raphael’,
        conteúdo: ‘Node’,
    },
{
        nome: ‘Thays’,
        conteúdo: Redux,
    },
{
        nome: ‘Carol’,
        conteúdo: ‘Hooks’,
    }.
];

const nomeDosAlunos = alunos.map((aluno) =&amp;gt; aluno.nome));
nomeDosAlunos = [‘Thiago’, ‘Raphael’, ‘Thays’, ‘Carol’];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;
Temos o &lt;strong&gt;reduce(callback(acumulador, valorAtual, index, array), valorInicial)&lt;/strong&gt;. Diferente dos demais métodos, o reduce possui dois argumentos, um fundamental que é a callback que espera até quatro argumentos: acumulador, ele acumulará o retorno de cada iteração; o valorAtual que refere-se ao elemento do array daquela iteração, o index desse elemento e o array que seria todo array que está sendo iterado. Depois dessa callback. O segundo argumento é o valor inicial do acumulador. Esse argumento é opcional, caso não declarado, o valor inicial do acumulador será o valor do primeiro elemento do array.
&lt;/p&gt;

&lt;p&gt;
Pense que você quer somar todas as idades:
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const todasIdades = idades.reduce((acumulador, itemAtual) =&amp;gt; acumulador + itemAtual)
todasIdades = 150;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;
Para pesquisar em um array temos 4 métodos:
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;some()&lt;/strong&gt;: do inglês algum, que retornará true ou false se algum elemento do array suprir a condição passada através de uma callback;
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;idades.some((idade) =&amp;gt; idade === 12) retornará true porque há um elemento com valor 12 no array idades.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;
&lt;strong&gt;every()&lt;/strong&gt;: do inglês todo, que retornará true ou false se todos elementos do array suprirem a condição passada através de uma callback.
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;idades.every((idade) =&amp;gt; typeof idade === ‘number’) retornará true porque todos elementos do array idades são do tipo number.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;
&lt;strong&gt;find()&lt;/strong&gt;: retornará o primeiro elemento encontrado no array que suprir a condição passada através de uma callback.
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;idades.find((idade) =&amp;gt; idade &amp;lt; 30) retornará 21, porque é o primeiro elemento no array cujo valor é menor que 30.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;
&lt;strong&gt;filter()&lt;/strong&gt;: similar ao find, mas mais amplo, retornará todos os elementos no array que suprirem a condição passada através de uma callback.
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;idades.filter((idade) =&amp;gt; idade &amp;lt; 30) retornará [21, 1,12,8];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Espero que esse artigo ajude na compreensão dos conceitos de manipulação de arrays e como trabalhar com os elementos contidos neles em nossas aplicações.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>O Mito do meu Vira-Tempo</title>
      <dc:creator>Thiago Pederzolli Machado da Silva</dc:creator>
      <pubDate>Fri, 06 Nov 2020 15:17:06 +0000</pubDate>
      <link>https://dev.to/thiagopederzolli/o-mito-do-meu-vira-tempo-13ck</link>
      <guid>https://dev.to/thiagopederzolli/o-mito-do-meu-vira-tempo-13ck</guid>
      <description>&lt;p&gt;
Hoje venho contar mais um pouco da minha história e tentar desmistificar algumas ideias sobre a minha pessoa. O maior mito que digo que tenho visto sobre mim é a ideia de que eu possuo um “Vira-Tempo”(referência de Harry Potter, é um relógio especial no qual um feitiço de reversão de horas, podendo  voltar no tempo).
&lt;/p&gt;

&lt;p&gt;
Minha paixão e vontade de programar vinha desde a adolescência, porém devido ao famoso impostor, eu não acreditava que era inteligente o suficiente para tal área. Por esse motivo fui primeiro para Educação Física, percebi que não era algo que eu realmente queria. Sempre tive um amor muito grande pela mente humana, então ir para psicologia era o caminho mais certo na hora. Talvez fosse uma mensagem inconsciente para um caminho mais fácil para terapia e resolver os conflitos com esse impostor.
&lt;/p&gt;

&lt;p&gt;
Entrei na psicologia para trabalhar com psicologia desportiva, sem simpatizar nenhum pouco com Psicanálise. Com o tempo e muito estudo fui me descobrindo muito interessado em ser um psicólogo clínico com uma inclinação para psicanálise. Não deu outra, me formei, comecei a clinicar e a me especializar em psicanálise.
&lt;/p&gt;

&lt;h2&gt;
E onde entra a programação nessa história?
&lt;/h2&gt;

&lt;p&gt;
Assim como muitos que devem estar lendo esse texto, meu cenário foi abruptamente mudado pelo impacto da pandemia. Eu sempre tive um trabalho bem social, atendendo muitos alunos da universidade pública que vinham das regiões mais variadas do Brasil. Com a pandemia, as aulas foram suspensas, esses alunos retornaram para suas cidades e lá não possuíam infraestrutura para dar continuidade ao tratamento.
&lt;/p&gt;

&lt;p&gt;
De início isso foi devastador, vivia meu melhor momento na clínica, estava empolgado com a possibilidade de iniciar meu Mestrado em Filosofia, entrava no meu último ano da especialização. Me vi bem perdido em o que fazer, pois também não havia me adaptado a iniciar tratamentos de forma online, ou seja, eu precisava achar outro mercado para atuar, porque obviamente tirar proveito da saúde mental das pessoas no contexto em que vivemos e proporcionar um atendimento que eu não acreditava que pudesse ser o melhor que eu poderia entregar jamais seria uma opção.
&lt;/p&gt;

&lt;p&gt;
Foi ai que eu resolvi dar uma chance para a programação, conversei com alguns amigos da área, conheci a Rocketseat, fiz meu primeiro Hello World, participei da semana Reboot, conheci a comunidade de programadores e me apaixonei pelo universo como um todo.
&lt;/p&gt;

&lt;p&gt;
A programação me deu um novo propósito de vida. A comunidade, as amizades, as inúmeras possibilidades de ajudar outras pessoas através do ensinar, tudo isso tem sido propulsores para um potencial interno que nem eu acreditava ser possível.
&lt;/p&gt;

&lt;h2&gt;
O que isso tem a ver com o mito do meu Vira-Tempo?
&lt;/h2&gt;

&lt;p&gt;
Tem a ver com o contexto, o foco, a motivação e os anos de terapia.
&lt;/p&gt;

&lt;p&gt;
Felizmente eu vivo em um contexto onde eu posso ter foco total aos estudos, meus pais me dão o suporte necessário, devido ao fato de serem professores concursados não temos um contexto de luxo, mas temos condições de viver bem em meio ao cenário em que nos encontramos. Moro eu e minha mãe, ela aposentada e eu com poucos pacientes que ficaram, me sobra muito tempo livre ao longo da semana para que eu possa estar focado em estudar e evoluir.
&lt;/p&gt;

&lt;p&gt;
Justamente por serem professores, sempre cresci vendo o poder que a educação pode ter em mudar o mundo para melhor e o quanto a gente aprende muito mais ensinando os outros. Então, isso é o que explica minha motivação em fazer diversos cursos, pois assim tenho base para poder ajudar colegas com dificuldade em algum conceito, assim como tenho vários colegas sempre disponíveis para me ajudar quando encontro alguma dificuldade frente à alguma dificuldade nos meus estudos.
&lt;/p&gt;

&lt;p&gt;
Os anos de terapia me ajudaram muito a conhecer meus impostores e lidar de forma mais fácil com os medos e receios de não dar conta. Consigo avançar mais fácil em alguns conteúdos por isso. Também me ajuda muito a lidar com as incertezas, com compreender que não é possível dominar absolutamente tudo de cada conteúdo para avançar, que as coisas se conectam e que leva tempo para realmente dominar alguma ferramenta, que o importante no nível que me encontro é saber que elas existem, saber como pesquisar, saber ler a documentação, não ter vergonha de perguntar, não demorar para pedir ajuda.
&lt;/p&gt;

&lt;p&gt;
A especialização em psicanálise e a intenção de um Mestrado em Filosofia também foram de grande ajuda nesse processo inicial, pois como eram conteúdos complexos, o hábito do foco, a facilidade em interpretar, a facilidade em assimilar conceitos difíceis são questões que já vinham presentes no meu dia-a-dia.
&lt;/p&gt;

&lt;p&gt;
Outro fator relevante para essa minha dedicação toda e que tem uma questão muito pessoal é o quanto esse movimento tem mantido minha mente ocupada e minha saúde mental estável. Foi me encontrar na programação que me tirou de um processo depressivo que o início da pandemia estava causando, foi o que deu sentido e uma esperança de sobreviver a esse cenário caótico e sem prazo de resolução.
&lt;/p&gt;

&lt;p&gt;
Me manter codando praticamente da hora que acordo até o fim do dia, parando só para jogar com os amigos ou ver alguma bobagem no youtube ou alguma série antes de dormir, vai além de foco nos estudos. É uma forma de sobrevivência, é uma forma de manter um propósito, de me manter em pé e, principalmente, ser capaz de adquirir conhecimento para, através da educação, do compartilhamento de conhecimento, ajudar outras pessoas a atingirem o próximo nível e realizarem seus sonhos de se tornarem Devs.
&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Facilitando a matemática de seus códigos.</title>
      <dc:creator>Thiago Pederzolli Machado da Silva</dc:creator>
      <pubDate>Tue, 27 Oct 2020 16:19:27 +0000</pubDate>
      <link>https://dev.to/thiagopederzolli/facilitando-a-matematica-de-seus-codigos-5bom</link>
      <guid>https://dev.to/thiagopederzolli/facilitando-a-matematica-de-seus-codigos-5bom</guid>
      <description>&lt;p&gt;
Se você estuda linguagem de programação, principalmente nos estudos de lógica, muitos exercícios envolvem vários cálculos. Com certeza você já quebrou muito a cabeça tentando arredondar números, trabalhar com raiz quadrada, tentando entender como fazer exponenciação e muitas vezes fez um cálculo dentro de outro para resolver alguma dificuldade.
&lt;/p&gt;

&lt;p&gt;
Mas hoje venho trazer para vocês um pequeno resumo de vários métodos que o objeto Math possui. Ele é uma ótima ferramenta, com vários métodos que podem facilitar muito suas operações matemáticas e trabalho com números em alguns casos:
&lt;/p&gt;

&lt;p&gt;
Os primeiros que vou falar são as propriedades de arredondar, as principais são 3:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Math.ceil, que em tradução literal significa teto, então arredonda para cima.
&lt;/li&gt;
&lt;li&gt;
Math.floor, que em tradução literal significa chão, então arredonda para baixo.
&lt;/li&gt;
&lt;li&gt;
Math.round, que irá aplicar a regra de proximidade, de .1 a .4 arredonda para baixo e de .5 a .9 arredonda para cima.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MrCKVV-7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ik.imagekit.io/iseca49kdh/mathCeilFloorRound_BAl3hCC_g.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MrCKVV-7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ik.imagekit.io/iseca49kdh/mathCeilFloorRound_BAl3hCC_g.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
 imagem da sala dos Simpsons, escrito no teto Math.ceil(), Math.round(.5), Math.round(.6), Math.round(.7), Math.round(.8), Math.round(.9) e escrito no chão Math.floor(),  Math.round(.1), Math.round(.2), Math.round(.3), Math.round(.4)



&lt;p&gt;
Depois temos outras funcionalidades para manipular números como:
&lt;/p&gt;    


&lt;ul&gt;

&lt;li&gt;

Math.abs() retorna um número absoluto.
&lt;/li&gt;

&lt;li&gt;

Math.sqrt() que retorna a raiz quadrada do número declarado como argumento.
&lt;/li&gt;

&lt;li&gt;

Math.pow(n1, n2) que realiza exponenciação recebendo dois argumentos, o n1 é o número do cálculo e o n2 o número da exponenciação. Hoje em dia já temos um operador para isso que é o **.
&lt;/li&gt;

&lt;li&gt;

Math.random() que retorna um número aleatório entre 0 e 1, logo basta multiplicar pelo valor máximo que terá seu alcance de números aleatórios.
&lt;/li&gt;

&lt;li&gt;

Math.max() que retorna o maior número de uma lista de números.
&lt;/li&gt;

&lt;li&gt;

Math.min() que retorna o menor número de uma lista de números.
&lt;/li&gt;

&lt;ul&gt;


&lt;/ul&gt;
&lt;/ul&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Math.abs(-5.5); // 5.5

Math.sqrt(9); // 3

Math.pow(7, 2);    // 49
7 ** 2 // 49. Operador exponencial

Math.floor(Math.random() * 500);  // entre 0 e 500

Math.max(5,3,10,42,2); // 42

Math.min(5,3,10,42,2); // 2
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;
Mas para manipular um número, precisamos saber se realmente estamos recebendo um número. Para isso temos algumas alternativas:
&lt;/p&gt;



&lt;ul&gt;

&lt;li&gt;

Number.isNaN() vai retornar true ou false se o elemento declarado é NaN: Not A Number.
&lt;/li&gt;

&lt;li&gt;

Number.isInteger() vai retornar true ou false se o número é inteiro, ou seja, se não possui vírgula.
&lt;/li&gt;

&lt;li&gt;

parseFloat() ou Number.parseFloat() percorrem uma string que comece com um número e para no primeiro sinal que não seja +, -, . ou se depois tiver um . ele irá parar em um 0 subsequente.
&lt;/li&gt;

&lt;li&gt;

parseInt() ou Number.parseInt() percorrem uma string que comece com um número e para no primeiro sinal que não seja +, -, . ou se depois tiver um . ele irá parar em um 0 subsequente. O parseInt recebe um segundo argumento também, que é refere-se ao parâmetro base. É o sistema numérico matemático do valor do primeiro argumento. 10 é o valor para o sistema númerico decimal.
&lt;/li&gt;

&lt;ul&gt;


&lt;/ul&gt;
&lt;/ul&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Number.isNaN(NaN); // true
Number.isNaN(4 + 5); // false

Number.isInteger(20); // true
Number.isInteger(23.6); // false

Number.parseFloat('99.50'); // 99.5
Number.parseFloat('100 Reais'); // 100
Number.parseFloat('R$ 100'); // NaN

parseInt('99.50', 10); // 99
parseInt(5.43434355555, 10); // 5
Number.parseInt('100 Reais', 10); // 100
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;Graças a esses métodos que minha vida lidando com números ficou muito mais fácil e espero que facilite a vida de vocês também!&lt;/p&gt;




</description>
    </item>
    <item>
      <title>Por que eu fujo enquanto ele luta?</title>
      <dc:creator>Thiago Pederzolli Machado da Silva</dc:creator>
      <pubDate>Wed, 14 Oct 2020 20:09:18 +0000</pubDate>
      <link>https://dev.to/thiagopederzolli/por-que-eu-fujo-enquanto-ele-luta-3c6k</link>
      <guid>https://dev.to/thiagopederzolli/por-que-eu-fujo-enquanto-ele-luta-3c6k</guid>
      <description>&lt;p&gt;
Quem nunca refletiu sobre essa pergunta ao ouvir a clássica frase quanto o tópico é ansiedade, de que é ela a responsável por ativar nossos mecanismos psíquicos frente à situações amedrontadoras.
&lt;/p&gt;

&lt;p&gt;
Ao nos depararmos com uma situação de perigo, que nos gere a sensação desconfortável de medo e incapacidade, várias vezes nos deparamos com essas duas escolhas: posso enfrentar o que se encontra no meu caminho ou retroceder, fugir e escolher outro caminho.
&lt;/p&gt;

&lt;p&gt;
Nem sempre nossas escolhas acabam estando de acordo com nossas vontades e mais na frente da vida isso costuma cobrar um preço através de cobranças de terceiros ou internas sobre o porquê ter agido daquele jeito.
&lt;/p&gt;

&lt;p&gt;
Muito se fala sobre a importância de não se comparar, de que você deve se preocupar em ser melhor que você. Mas, ao meu ver, isso inibe uma outra parte importante para percepção da resposta que procuramos. É importante não se comparar com o outro em termos de evolução pessoal e do outro, mas é bom olhar as diferenças em relação ao outro para entender contexto.
&lt;/p&gt;

&lt;p&gt;
O título é uma pergunta sem resposta pronta, se você chegou aqui procurando a solução dos problemas, esse artigo não lhe ajudará.
&lt;/p&gt;

&lt;p&gt;
Para a psicanálise, é a existência do Outro que baliza nosso desenvolvimento. É o olhar dos pais e a validação de nossas atitudes que nos individualiza. Portanto, é involuntária e enraizada na nossa estruturação a ação de comparar-se aos outros. O filho quando pequeno compara-se ao pai, ao irmão mais velho.
&lt;/p&gt;

&lt;p&gt;
A sociedade é cunhada na arte da comparação, nos forçam a comparar nossos corpos com padrões de beleza, nos vendem estereótipos de histórias de sucesso para que comparemos a nossa com elas.
&lt;/p&gt;

&lt;p&gt;
É algo muito difícil lutar contra essas ações comparativas, elas vem de um inconsciente coletivo muito forte e é por isso que muita gente justifica com “Eu sei que não deveria fazer, mas não consigo evitar”.
&lt;/p&gt;

&lt;p&gt;
E por que abordo este ponto? Porque acredito que acrescentar uma variável a essa comparação pode ajudar muito a diminuir o sofrimento que as comparações podem causar: &lt;strong&gt;Questionamento!&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;em&gt;Por que estas te comparando com aquela pessoa? Por que estas te comparando agora? Qual a relevância desta comparação na tua vida? O que é que ambos estão fazendo representam para ti?
&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;
Tentar evitar comparações pode ser mais desgastante que lidar com as comparações em si. O fundamental é explorar os contextos, entender o processo todo, refletir sobre as histórias. Não é só sobre entender que histórias diferentes resultarão em ações diferentes, mas buscar entender um pouco do porquê disso ocorrer.
&lt;/p&gt;

&lt;p&gt;
Na era digital da informação, literalmente, na ponta dos dedos, nossa capacidade de reflexão começa a se tornar algo obsoleto e inibe a capacidade de abstração. O título não tem resposta, porque ele deveria ser um mantra. Deve ser algo a ser questionado, devemos entender o contexto em que o outro conseguiu algo que não conseguimos, devemos entender o contexto em que ele se desenvolveu, para conseguirmos também observar o contexto em que nos desenvolvemos.
&lt;/p&gt;

&lt;p&gt;
Entender o Outro e separar-se mentalmente dele é o principal ponto para conseguir uma compreensão melhor de si. É através desse processo reflexivo que conseguimos tomar mais consciência da nossa história, dando um contexto maior a momentos da nossa vida e através dessa nova compreensão ressignificar certas vivências para mudar nossos padrões de funcionamento, seja para que possamos lutar quando havíamos fugido ou para fugir em lutas que sabemos que não nos levarão a nada.
&lt;/p&gt;

&lt;p&gt;
Sempre lembrando que a forma mais segura de trilhar esse caminho de questionamentos é acompanhado de um profissional de psicologia capacitado para estar ao teu lado pelo processo todo.
&lt;/p&gt;

&lt;p&gt;
Lembrem-se: &lt;strong&gt; tudo que nos mobiliza fala mais da gente que dos outros.&lt;/strong&gt; Então se me comparo com alguém é porque algo daquele outro toca &lt;em&gt;em algo meu&lt;/em&gt;. É essa a reflexão que busco instigar com esse texto.
&lt;/p&gt;

</description>
    </item>
    <item>
      <title>O que Among Us nos ensina sobre Sindrome do Impostor</title>
      <dc:creator>Thiago Pederzolli Machado da Silva</dc:creator>
      <pubDate>Fri, 09 Oct 2020 18:40:20 +0000</pubDate>
      <link>https://dev.to/thiagopederzolli/o-que-among-us-nos-ensina-sobre-sindrome-do-impostor-3h5f</link>
      <guid>https://dev.to/thiagopederzolli/o-que-among-us-nos-ensina-sobre-sindrome-do-impostor-3h5f</guid>
      <description>&lt;p&gt;
Dependendo do contexto que você vive, já deve ter visto a febre que virou o jogo Among Us. Mas caso você não conheça, aqui vai um pouco de contexto:
&lt;/p&gt;

&lt;p&gt;
Trata-se de um jogo onde estão 10 jogadores numa nave e entre eles há um ou mais impostores. São três as possibilidades que permitem o encerramento da partida:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
a) caso a tripulação termine todas as suas tarefas; 
&lt;/li&gt;
&lt;li&gt;
b) quando a tripulação consegue por n meios descobrir qual dentre eles é o impostor o retira do jogo, ou;
&lt;/li&gt;
&lt;li&gt;
c) quando impostor consegue dizimar toda a população da aeronave por sabotagem ou por emboscada. 
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Cada vez que um corpo é encontrado, uma reunião é chamada  para debater sobre possíveis suspeitos e ocorre uma votação para saber se alguém será ejetado da nave ou se a votação será inconclusiva (sem retirar nenhum participante do jogo), tudo mediante a uma discussão onde acusações, provas e falsos testemunhos podem ser trocados.
&lt;/p&gt;

&lt;p&gt;
Um detalhe relevante para nossa analogia é que, mesmo morto ou ejetado, o tripulante é capaz de realizar suas tarefas, porém, se ele for ejetado injustamente, pode sentir-se desmotivado a continuar suas funções e ajudar o resto da tripulação.
&lt;/p&gt;

&lt;h2&gt;
E o que isso conversa com a Síndrome do Impostor?
&lt;/h2&gt;
&lt;p&gt;
Pensemos na nossa mente como a nave, precisamos nos atentar a várias áreas dela para sermos capazes de evoluir em nosso desenvolvimento, trabalhando capacidades tanto técnicas quanto de relações interpessoais.
&lt;/p&gt;

&lt;p&gt;
Para isso, precisamos de estudos, dedicação, diálogos internos. Mas mesmo assim, sempre parece ter uma voz interior tentando aniquilar nossas tentativas de evoluir em uma determinada capacidade, ou então tentando sabotar nosso aprendizado desviando o foco para uma outra área de atenção, a famosa distração que tanto nos faz procrastinar.
&lt;/p&gt;

&lt;p&gt;
Deixemos de lado a dualidade do ganhar/perder, abstrair e pensar num cenário maior e vários contextos é um ponto de evolução da capacidade cognitiva. Vamos refletir sobre os impactos das ações na nossa existência.
&lt;/p&gt;

&lt;p&gt;
A primeira saída, ejetar o impostor é inviável. Ele é parte de nossa existência e essência, não seria viável, ele vai dar um jeito de continuar lá, tanto que, no jogo, se há mais de um impostor e um deles é descoberto, mesmo ejetado ele pode continuar ajudando seus companheiros sabotando a nave.
&lt;/p&gt;

&lt;p&gt;
Então devemos simplesmente ignorá-lo? Também não, porque se não mantemos a atenção em seus movimentos, podemos ser pegos desatentos e ele achar um jeito de nos derrubar.
&lt;/p&gt;

&lt;p&gt;
Precisamos entender que são comunicações inconscientes que lutam por manter um estado de funcionamento ao qual já estão adaptados e que, por medo dos impactos que as mudanças podem gerar, atuam em prol desta manutenção.
&lt;/p&gt;

&lt;p&gt;
Devemos atentar para os momentos em que surge a possibilidade de diálogos internos e buscar entender o porquê aquela capacidade foi sabotada, porque mesmo com um domínio tão bom da técnica não consigo me expressar, ou o que faz na teoria eu conseguir compreender cada conceito, mas na hora da prática a mente trava. Devemos, principalmente, entender que, assim como o jogo, cada momento implica em um impostor diferente, que pode ou não se repetir, então talvez um problema pessoal possa interferir no profissional e vice-versa, ou um pode não ter nada a ver com o outro e achamos que é o mesmo para evitar de olhar para um problema maior.
&lt;/p&gt;

&lt;p&gt;
Muitas vezes, nas partidas de Among Us, os tripulantes conseguem vencer por entender o funcionamento do impostor, se juntarem e conseguir uma estratégia onde sejam feitas todas tarefas para consertar a nave. Assim deve funcionar nossa mente, conversando entre suas diversas instâncias para descobrir como gerar mudanças sem criar um ambiente psiquicamente desestruturante.
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--boXu_sHN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ik.imagekit.io/iseca49kdh/victory_QWyru_pkb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--boXu_sHN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ik.imagekit.io/iseca49kdh/victory_QWyru_pkb.png"&gt;&lt;/a&gt;&lt;/p&gt;
Print da tela de um momento em que a tripulação ganhou a partida de Among Us



</description>
    </item>
  </channel>
</rss>
