<?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>Forem: Sergio</title>
    <description>The latest articles on Forem by Sergio (@sergjun).</description>
    <link>https://forem.com/sergjun</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%2F663811%2Fb4e6bc97-5a8a-46b7-b317-2c99825041c4.png</url>
      <title>Forem: Sergio</title>
      <link>https://forem.com/sergjun</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/sergjun"/>
    <language>en</language>
    <item>
      <title>Aprendendo mais sobre API's</title>
      <dc:creator>Sergio</dc:creator>
      <pubDate>Mon, 01 Nov 2021 20:17:01 +0000</pubDate>
      <link>https://forem.com/sergjun/aprendendo-mais-sobre-apis-g25</link>
      <guid>https://forem.com/sergjun/aprendendo-mais-sobre-apis-g25</guid>
      <description>&lt;h2&gt;
  
  
  Table Of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Porque aprender mais sobre API's&lt;/li&gt;
&lt;li&gt;O que é uma API&lt;/li&gt;
&lt;li&gt;APIREST&lt;/li&gt;
&lt;li&gt;Controller-Services-Repository&lt;/li&gt;
&lt;li&gt;Headers-Verbos&lt;/li&gt;
&lt;li&gt;Parâmetros&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Porque aprender mais sobre API's
&lt;/h2&gt;

&lt;p&gt;Meu primeiro contato com API's não faz muito tempo mas foi algo meio estranho, sempre me pareceu que era uma coisa muito mais complexa do que parecia ser &lt;em&gt;(e é)&lt;/em&gt;, mas nunca tive curiosidade o suficiente para ir afundo, afinal, eu dava o fetch na URL, fazia um &lt;strong&gt;GET&lt;/strong&gt; me voltava o json que eu queria e eu manipulava isso a meu bel prazer ou eu conseguia fazer um &lt;strong&gt;POST&lt;/strong&gt; simples voltava o status code 200 e ta pronto o sorvetinho.&lt;/p&gt;

&lt;p&gt;Essa semana precisei testar uma API privada do 0 e ver o que era possível fazer com os métodos disponíveis e, não sei se por inexperiência minha, ou se a plataforma que eu estava usando não ajudou (talvez um misto dos dois), eu não consegui testar muita coisa, afinal, tinha um conhecimento extremamente raso sobre API's e com isso, decidi estudar e ir mais afundo, continuo com o conhecimento raso, mas agora entendo um pouco melhor sobre API's, o que são e suas funcionalidades, vou escrever esse artigo para fixar melhor as informações que aprendi essa semana, se isso conseguir ajudar alguém que, por ventura, esbarre em dificuldades semelhantes as que eu tive então sera uma vitoria dupla! &lt;/p&gt;

&lt;p&gt;Alguns disclaimers necessários:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Boa parte do que aprendi aqui, aprendi pesquisando em diversas fontes mas a mais rica e que mais me agregou conhecimento foi o&lt;a href="https://www.youtube.com/watch?v=VqVQ7vHY32o&amp;amp;list=PLf8x7B3nFTl17WeEVj405tHlstiq1kNBX"&gt; Curso de testes de API Rest do Julio de Lima&lt;/a&gt;, se esse conteúdo te ajudar de qualquer forma, peço que fortaleça o canal dele se inscrevendo e dando like nos vídeos, a quantidade e qualidade de conteúdo sobre testes que ele faz merece ser reconhecida e retribuída de alguma maneira&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Caso encontre algo de errado escrito aqui, desde conceitos ate erros gramaticais, por favor, me avise (seja por comentários, twitter etc) &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;br&gt;
 &lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;a&gt;&lt;/a&gt; O que é uma API
&lt;/h2&gt;

&lt;p&gt;Ao pé da letra, API significa &lt;strong&gt;"Application Programming Interface"&lt;/strong&gt;, traduzido ficaria, &lt;strong&gt;"Interface de Programação de Aplicativos"&lt;/strong&gt;, a principio esse conceito não ficou tão claro pra mim então comecei a pesquisar mais e ler mais sobre como outras pessoas "definiam" uma API.&lt;/p&gt;

&lt;p&gt;O próprio Julio em um dos videos dele deu a explicação que eu achei mais didática e clara possível, se temos o UI/UX, que se trata sobre a User Interface (Interface do Usuário) e User Experience (Experiencia do Usuário), podemos pensar na API como uma UI, mas voltada ao software que irá utilizá-la, onde, ao se pensar no UI, se pensa em uma pessoa vendo aquela interface e o quão intuitiva ela é, na API se pensa em, o quão "intuitivo" sera para outros softwares interagirem com o que aquela API oferece!&lt;/p&gt;

&lt;p&gt;O software não precisa saber (geralmente) em que linguagem a API foi escrita, ele só precisa saber o tipo de resultado que ela ira gerar, o resto é abstraído, apenas o resultado importa, da mesma forma que você não precisa saber o que acontece embaixo dos panos do dev.to, você veio ler o texto apenas.&lt;/p&gt;

&lt;p&gt; &lt;br&gt;
 &lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;a&gt;&lt;/a&gt; APIREST/RESTful
&lt;/h2&gt;

&lt;p&gt;Esse tópico com certeza merece um artigo só para dissecar o tanto de coisa que tem para ser entendida sobre REST, mas fica para a proxima, só de ter a noção do que é uma APIRest já ajuda a entender melhor sobre tudo isso.&lt;/p&gt;

&lt;p&gt;O ponto central sobre REST &lt;strong&gt;(sigla para Representational State Transfer ou Transferência de Estado Representacional)&lt;/strong&gt; é ser um modelo/estilo de arquitetura definido pela W3C, um dos seus principais conceitos é utilizar o protocolo HTTP (verbos, accept headers, códigos de estado HTTP etc) de forma explícita e representativa para se comunicar e geralmente utilizar arquivos JSON e XML para a transferencia de dados.&lt;/p&gt;

&lt;p&gt;Isso significa que, se você já mexeu com uma APIRestful, APIs que seguem esse estilo de arquitetura, você consegue ter noção sobre como outras API's com essa arquitetura funcionam.&lt;/p&gt;

&lt;p&gt; &lt;br&gt;
 &lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;a&gt;&lt;/a&gt; Controller-Services-Repository
&lt;/h2&gt;

&lt;p&gt;Geralmente dentro de uma APIRest nos temos essas três "entidades" fazendo com que ela seja funcional e definindo elas seria mais ou menos assim: &lt;/p&gt;
&lt;h3&gt;
  
  
  Services
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Geralmente é a camada do backend que armazena as regras de negocio&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Repositories
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Responsável por trafegar as informações entre a regra de negocio e o sistema de armazenamento/banco de dados&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Controller
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Intermediador entre quem chama (aplicação que vc esta utilizando) e os serviços e repositórios&lt;/li&gt;
&lt;li&gt;Disponível via HTTP, geralmente&lt;/li&gt;
&lt;li&gt;Controla autenticação/autorizações&lt;/li&gt;
&lt;li&gt;Recebe endpoints via anotações&lt;/li&gt;
&lt;li&gt;Define os métodos/verbos necessários para acessar as funções&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Um fluxo simulando a utilização de uma API seria mais ou menos assim:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Interface Grafica =&amp;gt; Controller =&amp;gt; Services =&amp;gt; Repository =&amp;gt; Database&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Seu site/interface grafica faz a requisição a API pelo controller, que envia a requisição ao services que envia o que foi solicitado ao Repository que ai vai consultar/enviar as informações para o banco de dados/database e então:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Interface Grafica &amp;lt;= Controller &amp;lt;= Services &amp;lt;= Repository &amp;lt;= Database&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Fazer o caminho contrario, o Database, envia o resultado da sua requisição para o Repository, que envia para o Services, que envia para o Controller e este te da uma resposta em JSON ou XML!&lt;/p&gt;

&lt;p&gt; &lt;br&gt;
 &lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;a&gt;&lt;/a&gt; Headers-Verbos
&lt;/h2&gt;

&lt;p&gt;Cabeçalho e Headers são dois métodos do protocolo HTTP que são utilizados em requisições numa APIRest, detalhando um pouco mais sobre eles teríamos:&lt;/p&gt;
&lt;h3&gt;
  
  
  Headers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Informações técnicas para ajudar o servidor a entender o que está sendo enviado naquela requisição&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Authorization geralmente vai no header da requisição&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Verbos
&lt;/h3&gt;

&lt;p&gt;As ações que aquela requisição deseja fazer, geralmente as mais utilizadas são: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;POST - Criar uma nova informação no backend, pode ser usado também para enviar informações sensíveis utilizando o protocolo HTTPS para criptografar a informação, por exemplo, para autenticar um usuário.&lt;/li&gt;
&lt;li&gt;GET - Buscar uma informação no backend&lt;/li&gt;
&lt;li&gt;PUT - Atualizar uma informação no backend&lt;/li&gt;
&lt;li&gt;DELETE - Deletar uma informação no backend&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Exemplo de requisição via CURL
&lt;/h3&gt;



&lt;p&gt;&lt;code&gt;curl -X POST -is "https://api.github.com/user/repos" -H 'Authorization: token &amp;lt;token&amp;gt;' -H 'Content-Type: application/json' -d '{"name": "teste-api-swagger"}'&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;onde:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://curl.se/"&gt;curl&lt;/a&gt; é uma ferramenta/biblioteca por linha de comando para transferência de data via URL&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;-X declara qual verbo/método sera feito, nesse caso POST para autenticação&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;-i é o método indicando que, queremos ver as informações do cabeçalho que a nossa resposta retorna&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;-s é o método indicando que, não queremos ver as informações sobre quanto tempo demorou para download e quanto tempo demorou para processar&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;-H significa que as informações em "" são informações referentes ao header da requisição, nesse caso, a Autorização via token e o content-type indicando que estamos enviando um json&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;-d é o body da nossa requisição, o conteúdo dela por assim dizer&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;br&gt;
 &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a&gt;&lt;/a&gt; Parâmetros
&lt;/h2&gt;

&lt;p&gt;Nas requisições, há algumas formas de se passar parâmetros e assim conseguir respostas de acordo com a sua necessidade, podemos passar parametros pelo &lt;strong&gt;body&lt;/strong&gt; da requisição, pelo &lt;strong&gt;header&lt;/strong&gt;, pelo &lt;strong&gt;query&lt;/strong&gt; ou pelo &lt;strong&gt;path&lt;/strong&gt; dela&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Body:&lt;br&gt;
Usando o -d dentro do curl &lt;strong&gt;ex: -d '{"name": "teste-api-swagger"}&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Header:&lt;br&gt;
Usando o -H dentro do curl, com aspas simples &lt;strong&gt;-H 'Authorization: chave de autorização da API'&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Query:&lt;br&gt;
Depois do endpoint, usando o ? e o &amp;amp; caso tiver mais de um parâmetro, &lt;strong&gt;"ex: localhost:3000/users?id=1&amp;amp;name=teste"&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Path:&lt;br&gt;
Depois do endpoint, colocando um / antes do nome do parametro, &lt;strong&gt;"ex: localhost:3000/users/1"&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>learinpublic</category>
    </item>
    <item>
      <title>Github Copilot, useState e useEffects</title>
      <dc:creator>Sergio</dc:creator>
      <pubDate>Tue, 20 Jul 2021 13:23:29 +0000</pubDate>
      <link>https://forem.com/sergjun/github-copilot-usestate-e-useeffects-dep</link>
      <guid>https://forem.com/sergjun/github-copilot-usestate-e-useeffects-dep</guid>
      <description>&lt;h2&gt;
  
  
  Table Of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Introdução&lt;/li&gt;
&lt;li&gt;useState&lt;/li&gt;
&lt;li&gt;useEffect&lt;/li&gt;
&lt;li&gt;Github Copilot&lt;/li&gt;
&lt;li&gt;Links úteis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;/p&gt;


&lt;h3&gt;Ps:&lt;/h3&gt;
&lt;p&gt;acabei notando que em todos os trechos de codigo aqui colocados, quando a arrow function é usada &lt;b&gt;=&amp;gt;&lt;/b&gt; ele esta exibindo os caracteres &lt;b&gt;(=&amp;amp;gt);&lt;/b&gt;&lt;br&gt;
Então, toda vez que verem &lt;b&gt;(=&amp;amp;gt);&lt;/b&gt; presumam ser =&amp;gt; até eu conseguir uma solução para isso.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt; &lt;br&gt;
&lt;/p&gt;
&lt;h2&gt;Introdução&lt;a&gt;&lt;/a&gt;&lt;br&gt;
&lt;/h2&gt;
&lt;br&gt;
 

&lt;p&gt;Recentemente, comecei a estudar React no curso do &lt;a href="https://estartandodevs.com.br/"&gt;Estardando Devs&lt;/a&gt; e acabamos estudando esses dois hooks primordiais, &lt;b&gt;useState&lt;/b&gt; e o &lt;b&gt;useEffect&lt;/b&gt;, algumas coisas sobre ambos conceitos ficaram um tanto quanto confusas para mim, então, depois de muito apanhar e praticar fui pesquisar e procurar entender mais sobre ambos para complementar o meu conhecimento. &lt;/p&gt;

&lt;p&gt;Resolvi escrever esse texto para fixar mais esse aprendizado e talvez até ajudar qualquer pessoa que venha a ter dúvida semelhantes a minha, durante esse meio tempo de aprendizado, o meu acesso ao Github Copilot foi liberado e eu achei interessante narrar como foi "aprender" algo com uma tecnologia de I.A me dando algum auxilio e como ela funciona.  &lt;/p&gt;

&lt;p&gt;Reforçando que, esse texto se limita as minhas opiniões e experiencias;&lt;br&gt;
 &lt;/p&gt;

&lt;p&gt;Não irei entrar nos conceitos de &lt;b&gt;"O que é hook"&lt;/b&gt; ou explicações profundas sobre o &lt;b&gt;React&lt;/b&gt;, nem acho que tenho conhecimento para tal ainda, usarei exemplos simples mas funcionais que me ajudaram a entender melhor os conceitos e no final do texto irei deixar links de artigos que eu li/estou lendo para ter uma compreensão mais detalhada sobre tudo o que está sendo escrito aqui.  &lt;/p&gt;

&lt;p&gt;Criticas e sugestões sobre o conteúdo o texto são sempre bem vindas, por favor, se achou algo errado/mal escrito ou coisa do tipo, me oriente que eu irei arrumar assim que possível!  &lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;useState&lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Pelas minhas pesquisas e por uma leve quantidade de dedução,o &lt;b&gt;useState&lt;/b&gt;, é o primeiro hook que geralmente é mostrado quando React é ensinado ou falado,  na documentação oficial do React o exemplo que nós é apresentado é em forma de contador, escrito em código ficaria mais ou menos assim:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
import React, { useState } from 'react;

function Example() {
    const [count, setCount] = useState(0)

    return (

            &amp;lt;p&amp;gt;You clicked {count} times&amp;lt;/p&amp;gt;
            &amp;lt;button&amp;gt; setCount(count + 1)}&amp;amp;gt;
                Click me
            &amp;lt;/button&amp;gt;

    );
}

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

&lt;/div&gt;
&lt;p&gt;Antes de eu dar minha explicação sobre como consegui entender melhor o que o useState faz, vou postar a forma feito em Javascript puro pra mostrar exatamente o que o count é e o que o setCount são:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
let count = 0;

const setCount = (value) =&amp;amp;gt; {
    count = value
}

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

&lt;/div&gt;
&lt;p&gt;O useState tem dois valores, o primeiro é uma &lt;b&gt;variável&lt;/b&gt; e o segundo é uma &lt;b&gt;função&lt;/b&gt;,e o trabalho dessa função é basicamente atualizar a variável!&lt;/p&gt;

&lt;p&gt;Exemplificando a variável agora que esse exemplo está claro:&lt;/p&gt;

&lt;p&gt;&lt;b&gt;const [count, setCount] = useState(0)&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;const&lt;/b&gt; - declaração de que a variável é uma const.&lt;br&gt;
&lt;b&gt;[count, setCount ]&lt;/b&gt; - desestruturação do array, onde &lt;b&gt;count&lt;/b&gt; é a variável e &lt;b&gt;setCount&lt;/b&gt; - é a função que atualiza o estado dessa variável.&lt;br&gt;
&lt;b&gt; useState(0)&lt;/b&gt; - passando o parâmetro inicial para a função e consequentemente para a variável, ou seja, &lt;b&gt;count&lt;/b&gt; ira começar em &lt;b&gt;(0)&lt;/b&gt;&lt;/p&gt;

&lt;h4&gt;Reforçando que:&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;useState é um &lt;b&gt;array&lt;/b&gt;, mas seu retorno não está limitado a tal, no exemplo acima foi passado um nú mero, porem poderia ter sido passado uma string &lt;b&gt;" "&lt;/b&gt; (vazia ou não), ou um objeto &lt;b&gt;{ }&lt;/b&gt; (vazio ou não) &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ainda sobre a ideia de ser um array, a desestruturação do mesmo é opcional e facilita muito a leitura, mas poderia ser usado dessa forma:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; const arrayState = useState(0);
 const count = arrayState[0]; 
 const setCount = arrayState[1];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Um ultimo exemplo usando dois useStates para exemplificar:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function App () {
    const [count, setCount] = useState (0)
    const [theme, setTheme] = useState ("")

    function decrementCount () {
        setCount(prevCount =&amp;amp;gt; prevCount -1)
        setTheme('green')
    }

    function incrementCount() {
        setCount(prevCount =&amp;amp;gt; prevCount +1)
        setTheme('blue')
    }

    return (
        &amp;amp;lt;&amp;amp;gt;
        &amp;lt;button&amp;gt; - &amp;lt;/button&amp;gt;
        &amp;lt;span&amp;gt;{count}&amp;lt;/span&amp;gt;
        &amp;lt;span&amp;gt;{theme}&amp;lt;/span&amp;gt;
        &amp;lt;button&amp;gt; + &amp;lt;/button&amp;gt; 
        &amp;amp;gt;
    )
}

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

&lt;/div&gt;
&lt;p&gt;No código acima, temos dois useState, um para gerenciar a variável &lt;b&gt;count&lt;/b&gt; inicialmente declarado como &lt;b&gt;0&lt;/b&gt;, e um para gerenciar a variável &lt;b&gt;theme&lt;/b&gt;, inicialmente declarado como " " (uma string vazia), e temos dois botões no fim do código onde, cada um deles tem uma função diferente atribuída, ao se clicar no botão de &lt;b&gt;-&lt;/b&gt; a variável &lt;b&gt;count&lt;/b&gt; sera subtraída em 1 e a variável &lt;b&gt;theme&lt;/b&gt; vai renderizar &lt;b&gt;green&lt;/b&gt; na tela, ao clicar no botão de &lt;b&gt;+&lt;/b&gt; a variável &lt;b&gt;count&lt;/b&gt; sera somada em 1 e a variável &lt;b&gt;theme&lt;/b&gt; ira renderizar &lt;b&gt;blue&lt;/b&gt;!&lt;br&gt;
 &lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;useEffect&lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Confesso que esse eu demorei um pouco mais para entender, o conceito e o que fazia, mas com o exemplo que eu vi, e irei escrever aqui, ficou claro e bem mais compreensível. &lt;/p&gt;

&lt;p&gt;Dada a minha própria limitação, não sera tão extenso quanto o &lt;b&gt;useState&lt;/b&gt; foi, mas acredito que ficará claro! &lt;/p&gt;

&lt;p&gt;Um jeito simples de se entender o useEffect de inicio é, pensar em um bloco de código que você deseja executar toda vez que algum componente for renderizado, isso ficou bem confuso de inicio mas o exemplo abaixo me fez entender melhor:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function App () {
    const [resourceType, setResourceType] = useState ('')

    console.log('render')

    useEffect (() =&amp;amp;gt; {
        console.log("resourceType changed")

    }, [resourceType] )

    return (
        &amp;amp;lt;&amp;amp;gt;

                &amp;lt;button&amp;gt; setResourceType('post')}&amp;amp;gt;Post&amp;lt;/button&amp;gt;
                &amp;lt;button&amp;gt; setResourceType('users')}&amp;amp;gt;Users&amp;lt;/button&amp;gt;
                &amp;lt;button&amp;gt; setResourceType('comments')}&amp;amp;gt;Comments&amp;lt;/button&amp;gt;

            &amp;lt;h1&amp;gt;{resourceType}&amp;lt;/h1&amp;gt;
        &amp;amp;gt;
    )
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;De inicio, temos a utilização do useState novamente, como dito na parte de cima, ele é uma hook que ira controlar estados, &lt;b&gt;resourceType&lt;/b&gt; é a variável e &lt;b&gt;setResourceType&lt;/b&gt; a função que atualiza o valor dessa variável, e de inicio está sendo passado uma string vazia para ela &lt;b&gt;( ' ' )&lt;/b&gt;. &lt;/p&gt;

&lt;p&gt;Logo abaixo dessa declaração, temos um &lt;b&gt;console.log&lt;/b&gt; que ira renderizar a palavra render, e em seguida temos o uso do &lt;b&gt;useEffect&lt;/b&gt;, o mesmo recebe uma função como parâmetro (que pelo o que eu vi, quase sempre será uma arrow function) e essa função irá rodar outro &lt;b&gt;console.log&lt;/b&gt; com a frase resourceType changed, e no fim do &lt;b&gt;useEffect&lt;/b&gt;, temos um array com um parâmetro, nesse caso o &lt;b&gt;resourceType&lt;/b&gt;, a nossa variável lá do inicio. &lt;/p&gt;

&lt;p&gt;Na ultima parte, temos a renderização, três botoes, cada botão executando a função &lt;b&gt;setResourceType&lt;/b&gt; e em cada um deles um parâmetro diferente é passado, no primeiro botão, o parâmetro é o &lt;b&gt;post&lt;/b&gt;, no segundo botão, o parâmetro é &lt;b&gt;users&lt;/b&gt;, e no terceiro o parâmetro é &lt;b&gt;comments&lt;/b&gt;. &lt;/p&gt;

&lt;p&gt;A funcionalidade do useEffect no exemplo acima será a seguinte: &lt;/p&gt;

&lt;p&gt;Quando esse componente for renderizado, ele ira exibir no console a palavra render devido aquele primeiro console.log, ao se clicar em qualquer um dos botões, o &lt;b&gt;h1&lt;/b&gt; da página irá renderizar de acordo com o botão (&lt;b&gt;post &lt;/b&gt;ou &lt;b&gt;users&lt;/b&gt; ou &lt;b&gt;comments&lt;/b&gt;) e ira exibir resourceType changed que estava no segundo console.log dentro do useEffect. &lt;/p&gt;

&lt;p&gt;Isso acontece pois, como parâmetro, no useEffect, nos passamos o &lt;b&gt;resourceType&lt;/b&gt; dentro daquele array, com isso, o bloco de código dentro do useEffect só sera rodado se o &lt;b&gt;resourceType&lt;/b&gt; for modificado! &lt;/p&gt;

&lt;p&gt;Se não houvesse parametro no array, e o mesmo estivesse vazio &lt;b&gt;[ ]&lt;/b&gt;, o bloco do useEffect seria usado apenas uma vez, durante a primeira renderização! &lt;/p&gt;

&lt;p&gt;Se clicar no botão do &lt;b&gt;Post&lt;/b&gt; uma vez, quando qualquer um dos dois outros parâmetros (&lt;b&gt;users&lt;/b&gt; ou &lt;b&gt;comments&lt;/b&gt;) estiver renderizado na tela, as duas mensagens serão exibidas, pois ao clicar no botão você chamou a função &lt;b&gt;setResourceType&lt;/b&gt; e assim modificou o &lt;b&gt;resourceType&lt;/b&gt; fazendo com que o código do bloco &lt;b&gt;useEffect&lt;/b&gt; seja executado, mas se após isso, você clicar novamente no mesmo botão, você tera apenas um dos consoles.log, o de render, fora do useEffect, pois o &lt;b&gt;resourceType&lt;/b&gt; segue sem ser modificado, era um &lt;b&gt;Post&lt;/b&gt; e você clicando no mesmo botão ele continua sendo um &lt;b&gt;Post&lt;/b&gt;, segue inalterado. &lt;/p&gt;

&lt;p&gt;Esse foi o exemplo mais simples que consegui achar e ver na pratica o useEffect e facilitou demais o entendimento do mesmo para mim, por isso achei interessante escrever ele para reforçar, só que, o useEffect não se limita a isso, há um conceito mais abrangente nele que envolve &lt;b&gt;React class lifecycle methods&lt;/b&gt; e &lt;b&gt;componentDidMount, componentDidUpdate, e componentWillUnmount&lt;/b&gt; (infelizmente não consegui achar o nome desses conceitos em português e não achei uma boa ideia fazer tradução ao pé da letra). &lt;/p&gt;

&lt;p&gt;Não posso falar sobre esses conceitos pois, ainda estou estudando e entendendo tudo isso, talvez num texto futuro eu escreva sobre, irei deixar os links que eu estou acompanhando e se aprofundam mais nesses assuntos na ultima parte! &lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;Github Copilot&lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Por fim, minha experiencia com a inteligencia artificial de copiloto! &lt;/p&gt;

&lt;p&gt;Bom, fiquei bem feliz ao receber no sábado o convite para o acesso antecipado do programa, estava (estou ainda na real) construindo um site para consumir a API do Github e exibir algumas informações e por coincidência recebi o convite no meio desse processo, mesmo sendo um projeto "simples" a primeira aparição do Copilot foi quase que imediata. &lt;/p&gt;

&lt;p&gt;Após a extensão ser instalada, você pode começar a utilizar o copiloto, usando a tag de comentário no Javascript &lt;b&gt;(//)&lt;/b&gt; e descrevendo o que você tem intenção de fazer geralmente retorna algo, utilizei as palavras fetch github api e em instantes depois de alguns enters o seguinte código me foi retornado:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function App() {
 //fetch data from github API
 const [data, setData] = useState(null);
 useEffect(() =&amp;amp;gt; {
   fetch("https://api.github.com/users/sergjun/repos")
     .then(response =&amp;amp;gt; response.json())
     .then(repos =&amp;amp;gt; setData(repos))
 }, []);

 return (

     &amp;lt;h2&amp;gt;
       Top languages
     &amp;lt;/h2&amp;gt;
     {data &amp;amp;amp;&amp;amp;amp; data.map((repo, i) =&amp;amp;gt; (

         &amp;lt;h4&amp;gt;{repo.name}&amp;lt;/h4&amp;gt;
         &amp;lt;p&amp;gt;{repo.description}&amp;lt;/p&amp;gt;

     ))}

 );
}

export default App;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Um fetch honesto ( ao meu ver de iniciante ) onde ele faz justamente o que se propõe, a única coisa que eu alterei no período em que estava testando foi o retorno do parâmetro do useState (&lt;b&gt;null&lt;/b&gt;), por algum motivo esse valor acabava quebrando a aplicação, ao se colocar um retorno de string vazia (&lt;b&gt;" "&lt;/b&gt;) ela parava de crashar. &lt;/p&gt;

&lt;p&gt;Essa foi a vez que o Copilot mais "deu as caras", no resto do código, não sei se por falha minha, ou dele, ou talvez a "complexidade" da aplicação, ele não palpitou e honestamente, não fez tanta falta, ficou ao meu ver sendo bem parecido com snippets ou trechos de código meio que prontos que as vezes você copia e altera algumas coisas. &lt;/p&gt;

&lt;p&gt;Ainda assim, é uma tecnologia muito interessante, que estou curioso para ver como irá evoluir e se comportar nos próximos tempos, é bem interessante ver as soluções propostas por ele, outras pessoas já disseram isso de forma exaustiva mas sempre é bom reforçar, não adianta copiar e colar, em algumas das sugestões, o mesmo fazia a sugestão de utilização de react com classes e de nada adiantaria eu usar um código daquele tipo sendo que nada entenderia.&lt;br&gt;
 &lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;Links úteis&lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Como eu falei, sou iniciante nisso tudo, há um mar de informações e diversas referencias pelas quais se pode procurar por ai, estou usando essas e aceito toda e qualquer tipo de contribuição!&lt;br&gt;
 &lt;br&gt;
 &lt;/p&gt;

&lt;p&gt;&lt;a href="https://pt-br.reactjs.org/docs/getting-started.html"&gt;Documentação oficial do React&lt;/a&gt;&lt;br&gt;
  &lt;br&gt;
&lt;a href="https://dev.to/dan_abramov/making-sense-of-react-hooks-2eib"&gt;Um texto do Dan Abramov falando sobre Hooks (inglês)&lt;/a&gt;&lt;br&gt;
 &lt;br&gt;
&lt;a href="https://pt-br.reactjs.org/docs/hooks-intro.html"&gt;Documentação oficial do React introduzindo hooks&lt;/a&gt;&lt;br&gt;
 &lt;br&gt;
&lt;a href="https://javascript.plainenglish.io/react-hooks-how-to-use-useeffect-ecea3e90d84f"&gt;Artigo muito bom falando sobre useEffect que o @ramonrxm me passou, muito obrigado, mais uma vez! (inglês)&lt;/a&gt;&lt;br&gt;
 &lt;br&gt;
&lt;a href="https://blog.webdevsimplified.com/2020-04/use-effect/"&gt;Artigo do autor do canal "web dev simplified" falando sobre useEffects, alguns exemplos foram tirados do canal dele, dos vídeos de useState e useEffect, recomendo demais! (inglês)&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>github</category>
      <category>react</category>
      <category>learninpublic</category>
    </item>
  </channel>
</rss>
