<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Viviane Martini - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Aprenda a codificar - de graça. Tutoriais de programação em Python, JavaScript, Linux e muito mais. ]]>
        </description>
        <link>https://www.freecodecamp.org/portuguese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Viviane Martini - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/portuguese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Mon, 25 May 2026 19:55:28 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/portuguese/news/author/viviane/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Como fazer o deploy da sua aplicação para a web usando Express.js e Heroku ]]>
                </title>
                <description>
                    <![CDATA[ Se você é novo no mundo do desenvolvimento para a web, provavelmente passará bastante tempo aprendendo a construir sites estáticos, com HTML, CSS e JavaScript. Você pode, então, começar a aprender como usar frameworks populares, como React, VueJS ou Angular. Porém, depois de experimentar algumas ideias novas e executar alguns ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-fazer-o-deploy-da-sua-aplicacao-para-a-web-usando-o-express-js-e-o-heroku/</link>
                <guid isPermaLink="false">648e17a9d1454605b613ff08</guid>
                
                    <category>
                        <![CDATA[ Node.js ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Viviane Martini ]]>
                </dc:creator>
                <pubDate>Mon, 21 Aug 2023 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/5f9c9c56740569d1a4ca317c.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-deploy-your-site-using-express-and-heroku/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to deploy your app to the web using Express.js and Heroku</a>
      </p><p>Se você é novo no mundo do desenvolvimento para a web, provavelmente passará bastante tempo aprendendo a construir sites estáticos, com HTML, CSS e JavaScript.</p><p>Você pode, então, começar a aprender como usar <em>frameworks </em>populares, como React, VueJS ou Angular.</p><p>Porém, depois de experimentar algumas ideias novas e executar alguns sites localmente, você pode se perguntar como realmente implantar ou fazer o<em> deploy</em> de seu site ou aplicação. Ocorre que, às vezes, pode ser difícil saber por onde começar.</p><p>Pessoalmente, acho que executar um servidor do Express hospedado no Heroku é uma das maneiras mais simples de começar. Este artigo mostrará como fazer isso.</p><p>O Heroku é uma plataforma de nuvem que suporta diversas linguagens de programação e <em>frameworks </em>diferentes.</p><p>Este não é um artigo patrocinado – é claro que existem muitas outras soluções disponíveis, como:</p><ul><li><a href="https://www.digitalocean.com/">Digital Ocean</a></li><li><a href="https://aws.amazon.com/">Amazon Web Services</a></li><li><a href="https://azure.microsoft.com/en-gb/">Azure</a></li><li><a href="https://cloud.google.com/">Google Cloud Platform</a></li><li><a href="https://www.netlify.com/">Netlify</a></li><li><a href="https://zeit.co/">ZEIT Now</a></li></ul><p>Confira todos eles e veja qual se adapta melhor às suas necessidades.</p><p>Pessoalmente, achei o Heroku o mais rápido e fácil de usar. Ele é "pronto para uso". A versão gratuita é um pouco limitada em termos de recursos. No entanto, posso recomendar com confiança para testes.</p><blockquote>Nota da tradução: ao final de 2022, o Heroku encerrou o <em><strong>tier</strong> </em>gratuito para implantação. Os planos mensais básicos por lá, no momento desta tradução, custam 5 dólares ao mês.</blockquote><p>Este exemplo hospedará um site simples usando um servidor do Express. Aqui estão os passos principais:</p><ol><li>Configurar o Heroku, o Git e o npm</li><li>Criar um servidor do Express.js</li><li>Criar arquivos estáticos</li><li>Implantar no Heroku</li></ol><p>Deve levar cerca de 25 minutos no total (ou mais, se você quiser gastar mais tempo nos arquivos estáticos).</p><p>Este artigo pressupõe que você já saiba:</p><ul><li>O básico de HTML, CSS e JavaScript </li><li>Uso básico da linha de comando</li><li>Git de nível iniciante para controle de versão</li></ul><p>Você pode encontrar todo o código <a href="https://github.com/pg0408/lorem-ipsum-demo">neste repositório</a>.</p><h3 id="configurando">Configurando</h3><p>O primeiro passo em qualquer projeto é configurar todas as ferramentas que você sabe que vai precisar.</p><p>Você vai precisar ter:</p><ul><li>Node e npm instalados em sua máquina local (leia como fazer isso <a href="https://nodejs.org/en/download">aqui</a> – em inglês)</li><li>Git instalado (<a href="https://www.atlassian.com/git/tutorials/install-git">leia este guia</a> – em inglês)</li><li>O CLI do Heroku instalado (<a href="https://devcenter.heroku.com/articles/heroku-cli#download-and-install">aqui está como fazer isso</a> – em inglês)</li></ul><p><strong><strong>1.</strong> Crie um diretório e inicialize um repositório Git</strong></p><p>A partir da linha de comando, crie um diretório de projeto e entre nesse diretório.</p><pre><code>$ mkdir lorem-ipsum-demo
$ cd lorem-ipsum-demo</code></pre><p>Agora que você está na pasta do projeto, inicialize um novo repositório do Git.</p><p>⚠️Esse passo é importante porque o <a href="https://devcenter.heroku.com/articles/how-heroku-works#deploying-applications">Heroku depende do Git</a> (texo em inglês) para implantar o código da sua máquina local em seus servidores na nuvem. ⚠️</p><pre><code>$ git init</code></pre><p>Como etapa final, você pode criar um arquivo README.md para editar posteriormente.</p><pre><code>$ echo "Edit me later" &gt; README.md</code></pre><p><strong><strong>2. </strong>Faça login na CLI do Heroku e crie um projeto</strong></p><p>Você pode fazer login no Heroku usando a CLI (interface de linha de comando) do Heroku. Você precisará ter uma conta no Heroku para fazer isso.</p><p>Existem duas opções aqui. Por padrão, o Heroku permite que você faça login por meio do navegador da web. Adicionar a flag <code>-i</code> permite que você faça login por meio da linha de comando.</p><pre><code>$ heroku login -i</code></pre><p>Agora, você pode criar um projeto no Heroku. Eu chamei o meu de <code>lorem-ipsum-demo</code>.</p><pre><code>$ heroku create lorem-ipsum-demo</code></pre><p>Nomeando seu projeto:</p><ul><li>O Heroku gerará um nome aleatório para o seu projeto se você não especificar um no comando.</li><li>O nome fará parte do URL que você pode usar para acessar seu projeto. Assim, escolha um de que você goste.</li><li>Isso também significa que você precisa escolher um nome de projeto único que ninguém mais tenha usado.</li><li>É possível renomear seu projeto posteriormente (não se preocupe muito em encontrar o nome perfeito agora).</li></ul><p><strong><strong>3. </strong>Inicialize um novo projeto com o npm e instale o Express.js</strong></p><p>Em seguida, você pode inicializar um novo projeto com o npm criando um arquivo <code>package.json</code>. Use o comando abaixo para fazer isso.</p><p>⚠️Essa etapa é crucial. O Heroku depende de você fornecer um arquivo package.json para saber que este é um projeto do Node.js ao criar sua aplicação.⚠️</p><pre><code>$ npm init -y</code></pre><p>Em seguida, instale o Express. O Express é um <em>framework </em>de servidor amplamente utilizado para o NodeJS.</p><pre><code>$ npm install express --save</code></pre><p>Finalmente, você está pronto para começar a programar!</p><h3 id="criando-um-servidor-do-express-simples">Criando um servidor do Express simples</h3><p>O próximo passo é criar um arquivo chamado <code>app.js</code>, que executa um servidor do Express localmente.</p><pre><code>$ touch app.js</code></pre><p>Esse arquivo será o ponto de entrada para a aplicação quando estiver pronta. Isso significa que o único comando necessário para iniciar a aplicação será:</p><pre><code>$ node app.js</code></pre><p>Primeiro, no entanto, você precisa escrever algum código no arquivo.</p><p><strong><strong>4.</strong> Edite o conteúdo do app.js</strong></p><p>Abra o <code>app.js</code> no seu editor favorito. Escreva o código mostrado abaixo e clique em salvar.</p><pre><code class="language-javascript">// Crie uma aplicação do express
const express = require("express")
const app = express()

// Use o middleware express-static
app.use(express.static("public"))

// Defina a primeira rota
app.get("/", function (req, res) {
  res.send("&lt;h1&gt;Hello World!&lt;/h1&gt;")
})

// Inicie o servidor escutando por solicitações
app.listen(process.env.PORT || 3000, 
	() =&gt; console.log("Server is running..."));</code></pre><p>Os comentários devem ajudar a indicar o que está acontecendo. Vamos, porém, dividir rapidamente o código para entendê-lo melhor:</p><ul><li>As primeiras duas linhas simplesmente requerem o módulo do Express e criam uma instância da aplicação.</li><li>A próxima linha requer o uso do middleware <code>express.static</code>. Ele permite que você sirva arquivos estáticos (como HTML, CSS e JavaScript) do diretório que você especificar. Nesse caso, os arquivos serão servidos de uma pasta chamada <code>public</code>.</li><li>A próxima linha usa <code>app.get()</code> para definir uma rota de URL. Quaisquer solicitações de URL para o URL raiz serão respondidas com uma mensagem de HTML simples.</li><li>A parte final inicia o servidor. Ele verifica qual porta o Heroku usará ou, se você estiver executando localmente, a porta padrão será 3000.</li></ul><p>⚠️O uso de <code>process.env.PORT || 3000</code> na última linha é importante para implantar sua aplicação com sucesso. ⚠️</p><p>Salve <code>app.js</code> e inicie o servidor com:</p><pre><code>$ node app.js</code></pre><p>Você, então, pode visitar <a href="http://localhost:3000/">localhost:3000</a> em seu navegador e verificar se o servidor está em execução.</p><h3 id="crie-seus-arquivos-est-ticos">Crie seus arquivos estáticos</h3><p>O próximo passo é criar seus arquivos estáticos. Esses são os arquivos HTML, CSS e JavaScript que você fornecerá sempre que um usuário visitar seu projeto.</p><p>Lembre-se de que, no <code>app.js</code>, você informou ao middleware <code>express.static</code> para servir arquivos estáticos a partir do diretório <code>public</code>.</p><p>O primeiro passo, é claro, é criar esse diretório e os arquivos que ele conterá.</p><pre><code>$ mkdir public
$ cd public
$ touch index.html styles.css script.js</code></pre><p><strong><strong>5. Edit</strong>e<strong> </strong>o arquivo<strong> HTML </strong></strong></p><p>Abra o arquivo <code>index.html</code> no seu editor de texto preferido. Essa será a estrutura básica da página que você fornecerá aos seus visitantes.</p><p>O exemplo abaixo cria uma página inicial simples para um gerador de <a href="https://en.wikipedia.org/wiki/Lorem_ipsum">Lorem Ipsum</a>, mas você pode ser tão criativo quanto quiser aqui.</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;head&gt;
	&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"&gt;&lt;/script&gt;
	&lt;link href="https://fonts.googleapis.com/css?family=Alegreya|Source+Sans+Pro&amp;display=swap" rel="stylesheet"&gt;
	&lt;link rel="stylesheet" type="text/css" href="styles.css"&gt;
&lt;/head&gt;
&lt;html&gt;
&lt;body&gt;
&lt;h1&gt;Lorem Ipsum generator&lt;/h1&gt;
  &lt;p&gt;How many paragraphs do you want to generate?&lt;/p&gt;
  &lt;input type="number" id="quantity" min="1" max="20" value="1"&gt;
  &lt;button id="generate"&gt;Generate&lt;/button&gt;
  &lt;button id="copy"&gt;Copy!&lt;/button&gt;
&lt;div id="lorem"&gt;
&lt;/div&gt;
&lt;script type="text/javascript" src="script.js"&gt;&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre><p><strong><strong>6. Edit</strong>e<strong> </strong>o arquivo<strong> CSS</strong></strong></p><p>A próxima etapa é editar o arquivo <code>styles.css</code>. Certifique-se de que ele esteja vinculado ao seu arquivo HTML.</p><p>O CSS abaixo é para o exemplo do Lorem Ipsum. Novamente, sinta-se à vontade para ser tão criativo quanto desejar.</p><pre><code class="language-css">h1 {
	font-family: 'Alegreya' ;
}

body {
	font-family: 'Source Sans Pro' ;
	width: 50%;
	margin-left: 25%;
	text-align: justify;
	line-height: 1.7;
	font-size: 18px;
}

input {
	font-size: 18px;
	text-align: center;
}

button {
	font-size: 18px;
	color: #fff;
}

#generate {
	background-color: #09f;
}

#copy {
	background-color: #0c6;
}</code></pre><p><strong><strong>7. Edit</strong>e o arquivo<strong> JavaScript</strong></strong></p><p>Por fim, você pode querer editar o arquivo JavaScript <code>script.js</code>. Isso permitirá tornar sua página mais interativa.</p><p>O código abaixo define duas funções básicas para o gerador de Lorem Ipsum. Sim, eu usei <a href="https://jquery.com/">JQuery</a> - é rápido e fácil de trabalhar.</p><pre><code class="language-javascript">$("#generate").click(function(){
	var lorem = $("#lorem");
	lorem.html("");
	var quantity = $("#quantity")[0].valueAsNumber;
	var data = ["Lorem ipsum", "quia dolor sit", "amet", "consectetur"];
	for(var i = 0; i &lt; quantity; i++){
		lorem.append("&lt;p&gt;"+data[i]+"&lt;/p&gt;");
	}
})

$("#copy").click(function() {
	var range = document.createRange();
	range.selectNode($("#lorem")[0]);
	window.getSelection().removeAllRanges();
	window.getSelection().addRange(range);
	document.execCommand("copy");
	window.getSelection().removeAllRanges();
	}
)</code></pre><p>Observe que, aqui, a lista de <code>data</code> foi cortada para facilitar a exibição. Na aplicação real, é uma lista muito mais longa de parágrafos completos. Você pode ver o arquivo completo no repositório ou consultar <a href="http://www.thelatinlibrary.com/cicero/fin1.shtml">aqui a fonte original</a>.</p><p><strong>Implantando sua aplicação</strong></p><p>Após escrever seu código estático e verificar se tudo funciona conforme o esperado, você pode se preparar para implantar no Heroku.</p><p>No entanto, há mais algumas coisas a fazer.</p><p><strong><strong>8. Cr</strong>ie um<strong> Procfile</strong></strong></p><p>O Heroku precisará de um Procfile para saber como executar sua aplicação.</p><p>Um Procfile é um "arquivo de processo" que informa ao Heroku qual comando executar para gerenciar um determinado processo. Neste caso, o comando dirá ao Heroku como iniciar seu servidor na web.</p><p>Use o comando abaixo para criar o arquivo.</p><p>⚠️Este é um passo importante, pois sem um Procfile, o Heroku não pode colocar seu servidor on-line. ⚠️</p><pre><code>$ echo "web: node app.js" &gt; Procfile</code></pre><p>Observe que o Procfile não possui uma extensão de arquivo (e.g., ".txt", ".json").</p><p>Além disso, observe como o comando <code>node app.js</code> é o mesmo usado localmente para executar o servidor.</p><p><strong><strong>9. </strong>Adicione e faça <em>commit </em>dos arquivos no Git</strong></p><p>Lembre-se de que você iniciou um repositório Git ao configurar. Talvez você já tenha adicionado e feito <em>commit </em>dos arquivos conforme avançava.</p><p>Antes de implantar no Heroku, certifique-se de adicionar todos os arquivos relevantes e fazer <em>commit </em>deles.</p><pre><code>$ git add .
$ git commit -m "pronto para o deploy"</code></pre><p>O último passo é fazer <em>push </em>para a <em>branch </em><code>master</code> do Heroku.</p><pre><code>$ git push heroku master</code></pre><p>Você deve ver a linha de comando imprimir uma série de informações enquanto o Heroku cria e implanta sua aplicação.</p><p>A linha a ser procurada é: <code>Verifying deploy... done.</code></p><p>Isso mostra que a criação foi bem-sucedida.</p><p>Agora você pode abrir o navegador e visitar nome-do-seu-projeto.herokuapp.com. Sua aplicação será hospedada na web para todos visitarem!</p><h3 id="breve-resumo">Breve resumo</h3><p>Abaixo estão os passos a serem seguidos para implantar uma aplicação do Express simples no Heroku:</p><ol><li>Crie um diretório e inicialize um repositório do Git</li><li>Faça login na CLI do Heroku e crie um projeto</li><li>Inicialize um novo projeto com o npm e instale o Express.js</li><li>Edite o conteúdo de app.js</li><li>Edite os arquivos estáticos HTML, CSS e JavaScript</li><li>Crie um Procfile</li><li>Adicione e faça <em>commit </em>no Git, depois faça <em>push </em>para a <em>branch </em><code>master</code> do Heroku</li></ol><h3 id="o-que-verificar-se-a-aplica-o-n-o-estiver-funcionando">O que verificar se a aplicação não estiver funcionando</h3><p>Às vezes, apesar das melhores intenções, os tutoriais na Internet não funcionam exatamente como você esperava.</p><p>Os passos abaixo devem ajudar a depurar alguns erros comuns que você pode encontrar:</p><ul><li>Você inicializou um repositório do Git na pasta do seu projeto? Verifique se você executou <code>git init</code>. O Heroku depende do Git para implantar o código da sua máquina local.</li><li>Você criou um arquivo <code>package.json</code>? Verifique se você executou <code>npm init -y</code>. O Heroku requer um arquivo <code>package.json</code> para reconhecer que é um projeto do Node.js.</li><li>O servidor está sendo executado? Verifique se seu <code>Procfile</code> usa o nome de arquivo correto para iniciar o servidor. Verifique se você tem: <code>web: node app.js</code> em vez de <code>web: node index.js</code>.</li><li>O Heroku sabe em qual porta escutar? Verifique se você usou <code>app.listen(process.env.PORT || 3000)</code> em seu arquivo <code>app.js</code>.</li><li>Seus arquivos estáticos têm erros? Verifique-os executando localmente e veja se há algum <em>bug</em>.</li></ul><p>Agradeço por ter chegado até aqui. Boa programação para você!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Domine a arte dos laços de repetição em JavaScript com esses truques incríveis ]]>
                </title>
                <description>
                    <![CDATA[ Escrito por: Yogi Muitas vezes em seu código, você precisa percorrer um array de números, strings ou objetos. Existem muitas maneiras de se fazer isso. Este tutorial tem como objetivo ensinar todas elas para que você se torne um mestre em "laços de repetição em JavaScript". 1. O laço for ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/domine-a-arte-dos-lacos-de-repeticao-em-javascript-com-esses-truques-incriveis/</link>
                <guid isPermaLink="false">641e46db02ec1d064260eab8</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Viviane Martini ]]>
                </dc:creator>
                <pubDate>Sun, 11 Jun 2023 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/1_oyfRe4XwyuFfhK41WJVMdw.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/master-the-art-of-looping-in-javascript-with-these-incredible-tricks-a5da1aa1d6c5/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Master the art of looping in JavaScript with these incredible tricks</a>
      </p><p>Escrito por: Yogi</p><p>Muitas vezes em seu código, você precisa percorrer um <strong>array de números,</strong> <strong>strings ou objetos</strong>. Existem muitas maneiras de se fazer isso. Este tutorial tem como objetivo ensinar todas elas para que você se torne um mestre em "laços de repetição em JavaScript".</p><h3 id="1-o-la-o-for"><strong><strong><strong>1. </strong></strong>O<strong><strong> </strong></strong>laço <em>f<strong><strong>or</strong></strong></em></strong></h3><p>O laço <strong><em>f<strong>or</strong></em><strong> </strong></strong>é a<strong> </strong>maneira mais básica de fazer um laço em seu código em JavaScript. É muito útil executar um bloco de código várias vezes. Ele usa um <strong>contador</strong>, cujo valor é inicializado primeiro e, em seguida, seu valor final é especificado.</p><p>O <strong>contador é aumentado em um valor específico</strong> toda vez que o laço é executado. O laço <em>for</em> verifica se o contador está dentro dos limites (entre o valor inicial e o valor final) e termina quando o valor do contador ultrapassa o valor final.</p><p>Mostrarei aqui alguns exemplos.</p><h4 id="a-percorrendo-um-array"><strong>a. Percorrendo um <em>array</em></strong></h4><p>No código abaixo, estou percorrendo todos os <strong>números em um array </strong>e imprimindo cada um deles na janela do console.</p><pre><code class="language-js">var numeros = [10, 20, 30, 40, 50];
for (var i = 0; i &lt; numeros.length; i++) {
    console.log(numeros[i]);
}</code></pre><p>Da mesma forma, você também pode percorrer <em>arrays</em> de <em>strings</em>.</p><h4 id="b-percorrendo-elementos-do-dom"><strong>b. Percorrendo elementos do DOM</strong></h4><p>Imagine que você deseja <strong>localizar e colorir de vermelho todas as âncoras</strong> na página. Então, aqui, você também pode usar o <strong>laço </strong><em><strong>for</strong></em>,<strong> </strong>assim:</p><pre><code class="language-js">var elementos = document.querySelectorAll("a");
for (var i= 0; i &lt; elementos.length; i++) {
    elementos[i].style.color = "red";
}</code></pre><p><em><em>Expl</em>icação</em>: Primeiro, eu peguei todas as âncoras em um array usando <code><strong><strong>document.querySelectorAll("a")</strong></strong></code>. Depois, eu os percorri e mudei a cor deles para vermelho.</p><p>No site da W3Schools, eu executei o código acima no console do navegador e veja o que aconteceu:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/1_QNXWEhb8zst1xFsYJAD2pg.png" class="kg-image" alt="1_QNXWEhb8zst1xFsYJAD2pg" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/05/1_QNXWEhb8zst1xFsYJAD2pg.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/05/1_QNXWEhb8zst1xFsYJAD2pg.png 792w" sizes="(min-width: 720px) 720px" width="792" height="696" loading="lazy"><figcaption><strong>Alterando a cor de todos os elementos de âncora para vermelho</strong></figcaption></figure><p>Observação: o <strong><strong>jQuery</strong></strong> também tem um método muito bom de repetição, o método <a href="http://www.yogihosting.com/jquery-each/">Each</a> (texto em inglês), que auxilia a percorrer <em>arrays</em>, objetos, elementos do DOM, JSON e XML com facilidade. Se estiver usando o &nbsp;jQuery no seu site, considere usá-lo ao fazer um laço de repetição.</p><h3 id="2-o-la-o-for-in"><strong><strong><strong>2. </strong></strong>O<strong><strong> </strong></strong>laço "<strong><strong>For In</strong></strong>"</strong></h3><p>O laço <strong><em>f<strong>or </strong>i<strong>n</strong></em></strong> é usado para percorrer as <strong>propriedades de um objeto/<em>array</em> </strong>sem usar um 'contador'. Portanto, é uma versão simplificada do laço <strong><em>for</em></strong>.</p><p>O bloco de código dentro do laço será executado uma vez para cada propriedade.</p><h4 id="a-percorrendo-as-propriedades-de-um-objeto"><strong>a. </strong>Percorrendo as propriedades de um objeto</h4><p>Tenho um objeto que contém algumas propriedades e usarei o<strong> laço <em>for in</em></strong> para pesquisar cada propriedade e seu valor.</p><p>O código abaixo <strong>imprime todas as propriedades e seus valores </strong>na janela do console.</p><pre><code class="language-js">var pessoa = { fname: "Nick", lname: "Jonas", age: 26 };
for (var x in pessoa) {
    console.log(x + ": " + pessoa[x])
}</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/1_hcxLefNPQ0RsJn0GBskJEw.png" class="kg-image" alt="1_hcxLefNPQ0RsJn0GBskJEw" width="487" height="150" loading="lazy"><figcaption><strong>Percorrendo as propriedades de um objeto com um laço <em>for in</em> em JavaScript</strong></figcaption></figure><h4 id="b-percorrendo-dados-em-json"><strong>b. Percorrendo dados em JSON</strong></h4><p><strong><strong>JSON</strong></strong> é um formato muito popular para transmitir objetos de dados que consistem em pares <strong>atributo-valor</strong> e tipos de dados de <em>array</em>. Os sites usam JSON para compartilhar suas informações com sites externos. Agora, mostrarei como extrair dados de um JSON.</p><p>Imagine que eu tenha algum JSON contendo algumas informações, conforme mostrado abaixo:</p><pre><code class="language-js">jsonData: {
um: [11, 12, 13, 14, 15],
dois: [21, 22, 23],
tres: [31, 32]
}</code></pre><p>O JSON tem um nó raiz chamado <em>'jsonData'</em>. Ele contém 3 nós – 'um', 'dois', 'tres'. Os nós também são chamados de chaves.</p><p>O código abaixo mostra como extrair informações do JSON usando o laço <em>for in</em>:</p><pre><code class="language-js">var json = {
jsonData: {
um: [11, 12, 13, 14, 15],
dois: [21, 22, 23],
tres: [31, 32]
}
};

for (var key in json.jsonData) {
    for (var key1 in json.jsonData[key]) {
        console.log(json.jsonData[key][key1])
    }
}</code></pre><p><em><em>Expl</em>icação</em>: Existem 2 laços<strong> <em>for in</em></strong> no código acima - o laço externo e o interno.</p><p>O <strong>laço externo</strong> é executado 3 vezes e cobre os nós 'um', 'dois' e 'tres'.</p><p>O <strong>laço interno<strong> </strong></strong>abrange todos os valores dentro do node selecionado, ou seja, os valores dentro dos <em>arrays</em> 'um', 'dois' e 'tres'.</p><p>Execute o código na sua página web ou na janela do console do seu navegador, e você verá todos os valores dos nós impressos, como na imagem abaixo:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/1_7SRGhCXNeuVVdwa_cOaLAw.png" class="kg-image" alt="1_7SRGhCXNeuVVdwa_cOaLAw" width="506" height="275" loading="lazy"><figcaption><strong>Laço <em>for in</em> em JSON</strong></figcaption></figure><h4 id="indo-um-pouco-mais-fundo-no-json">Indo um pouco mais fundo no JSON</h4><p>O mesmo JSON pode ser expresso colocando <strong><strong>[]</strong></strong> para conter os 3 nós:</p><pre><code class="language-js">jsonData: [{
um: [11, 12, 13, 14, 15]
}, {
dois: [21, 22, 23]
}, {
tres: [31, 32]
}]</code></pre><p>Agora, vou usar uma combinação de laços <strong><em>for</em> </strong>e<strong> <em>for in</em> </strong>para extrair todas as informações deste JSON. O código abaixo faz isso funcionar:</p><pre><code class="language-js">var json = {
jsonData: [{
um: [11, 12, 13, 14, 15]
}, {
dois: [21, 22, 23]
}, {
thes: [31, 32]
}]
};

for (var i = 0; i &lt; json.jsonData.length; i++) {
    for (var key in json.jsonData[i]) {
        for (var j = 0; j &lt; json.jsonData[i][key].length; j++) {
            console.log(json.jsonData[i][key][j])
        }
    }
}</code></pre><h3 id="3-o-la-o-while"><strong><strong><strong>3. </strong></strong>O laço<strong><strong> </strong></strong>"<em>w<strong><strong>hile</strong></strong></em>"</strong></h3><p>O<strong> laço <em>while</em></strong> tem uma condição especificada nele. Ele verifica a condição e executa o bloco de código enquanto a <strong>condição for verdadeira.</strong> Observe que o laço <em>while</em> <strong>não possui um contador </strong>como o laço <em>for</em>.</p><h4 id="a-percorrendo-um-elemento-de-tabela-html"><strong>a. </strong>Percorrendo um elemento de tabela HTML</h4><p>Suponha que eu tenha uma <strong>tabela HTML </strong>que mostre os preços de diferentes produtos. Essa tabela HTML se assemelha a da imagem abaixo:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/1_DKlO7m_UNsS57xCPwALDkQ.png" class="kg-image" alt="1_DKlO7m_UNsS57xCPwALDkQ" width="594" height="231" loading="lazy"><figcaption><strong>Tabela de preços sem o total dos produtos</strong></figcaption></figure><p>Você pode ver que esta tabela não mostra o<strong> preço total </strong>dos produtos. Portanto, se houver um requisito para você mostrar o preço total, você deverá <strong>percorrer todos os preços</strong> e mostrar o total no rodapé da tabela. É assim que você vai fazer.</p><p>Adicione o código da tabela HTML à sua página da web:</p><pre><code class="language-js">&lt;table id="priceTable"&gt;
    &lt;tr&gt;
        &lt;th&gt;Id&lt;/th&gt;
        &lt;th&gt;Nome do produto&lt;/th&gt;
        &lt;th&gt;Preço do produto&lt;/th&gt;
    &lt;/tr&gt;
    &lt;tr&gt; 
        &lt;td&gt;1&lt;/td&gt;
        &lt;td&gt;Camisas&lt;/td&gt;
        &lt;td&gt;49.99&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;2&lt;/td&gt;
        &lt;td&gt;Calças&lt;/td&gt;
        &lt;td&gt;55.50&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt; 
        &lt;td&gt;3&lt;/td&gt;
        &lt;td&gt;Meias&lt;/td&gt;
        &lt;td&gt;20&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;4&lt;/td&gt;
        &lt;td&gt;Calçados&lt;/td&gt;
        &lt;td&gt;99&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;5&lt;/td&gt;
        &lt;td&gt;Jaquetas&lt;/td&gt;
        &lt;td&gt;88.90&lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;</code></pre><p>Depois, adicione o CSS para dar um design adequado à tabela em html:</p><pre><code class="language-css">&lt;style&gt;
    #priceTable {
       font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
       border-collapse: collapse;
       width: 100%;
    }

        #priceTable td, #priceTable th {
            border: 1px solid #ddd;
            padding: 8px;
        }

        #priceTable tr {
            background-color: #f2f2f2;
        }

        #priceTable th {
            padding-top: 12px;
            padding-bottom: 12px;
            text-align: left;
            background-color: #4CAF50;
            color: white;
        }
&lt;/style&gt;</code></pre><p>Agora, percorra a tabela com o<strong> laço <em>while</em></strong> e calcule a soma de todos os produtos. Adicione o código JavaScript abaixo à sua página da web que faz isso funcionar:</p><pre><code class="language-js">var table = document.getElementById("priceTable");

var i = 1;
var soma = 0;
while (i &lt; table.rows.length) {
    soma += parseFloat(table.rows[i].cells[2].innerHTML)
    i++;
}

var row = table.insertRow(i);
var cell1 = row.insertCell(0);
var cell2 = row.insertCell(1);
var cell3 = row.insertCell(2);

cell2.innerHTML = "Preço Total";
cell3.innerHTML = soma;</code></pre><p><em><em>Expl</em>icação</em>: Primeiro, eu pego a referência da tabela usando <code><strong><strong>var table = document.getElementById("priceTable")</strong></strong></code>. Adicionei 2 variáveis ​​chamadas 'i' e 'soma'. A variável 'i' é a variável condicional do laço while, enquanto 'soma' continuará adicionando o preço de cada produto a ela.</p><p>Ao executar o <strong>laço while</strong> para o valor da variável 'i' de 1 a (total de linhas -1). Isso pega o total de linhas na tabela por <strong>table.rows.length</strong> e adiciona à condição do laço <em>while</em>:</p><pre><code class="language-js">while (i &lt; table.rows.length) {
  //…
}</code></pre><p><em>Observação</em>: A tabela tem 6 linhas, do índice 0 ao 5, e cada linha tem 3 colunas, do índice 0 ao 2. Eu executei especificamente o laço do valor da variável 'i' de 1 e não 0. Isso ocorre porque no índice 0 da linha na tabela está o nome da coluna (de que eu não preciso).</p><p>Dentro do laço <em>while</em>, continuei adicionando os valores do preço de cada produto à variável <code>soma</code> assim: <code><strong><strong>s</strong>oma<strong> += parseFloat(table.rows[i].cells[2].innerHTML)</strong></strong></code> e, no final, aumentei o valor de 'i ' por 1.</p><p>Por exemplo, quando o valor 'i' é 1, então <code><strong><strong>table.rows[1]</strong></strong></code> me dá a primeira linha (primeiro elemento 'tr'). Da mesma forma, <code><strong><strong>table.rows[1].cells[2]</strong></strong></code> fornecerá o valor da coluna de preço (elemento preço 'td') da primeira linha.</p><p>Quando o laço termina, adiciono uma<strong> nova linha à tabela</strong> no final. Dentro desta linha, estou adicionando as 3 colunas — 0º índice, 1º índice e 2º índice. Por fim, estou mostrando a string 'total' na 1ª coluna e o preço total contido na variável 'soma' na<strong> 2ª coluna</strong>.</p><p>O código que faz a adição desta nova linha é: </p><pre><code class="language-js">var row = table.insertRow(i);
var cell1 = row.insertCell(0);
var cell2 = row.insertCell(1);
var cell3 = row.insertCell(2);

cell2.innerHTML = "Total Price";
cell3.innerHTML = soma;</code></pre><p>O <code><strong><strong>table.insertRow(i)</strong></strong></code> adicionará uma 6ª linha porque o valor da variável 'i' é 6 no momento em que o <strong>laço <em>while</em> </strong>termina.</p><p>As colunas (elemento 'td') são adicionadas a esta nova linha por <code><strong><strong>row.insertCell(0), row.insertCell(1), row.insertCell(2)</strong></strong></code>.</p><p>Eu mostro um valor dentro da coluna por: </p><pre><code class="language-js">cell2.innerHTML = "Total Price";
cell3.innerHTML = soma;</code></pre><p>O código JavaScript acima criará uma nova linha contendo o preço total do produto. Agora a tabela ficará assim:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/1_JJruezS2_0bal7nO9xFFSw.png" class="kg-image" alt="1_JJruezS2_0bal7nO9xFFSw" width="594" height="264" loading="lazy"><figcaption><strong>Tabela de preços com o total dos produtos</strong></figcaption></figure><h4 id="b-loop-infinito"><strong>b. &nbsp;<em>Loop</em> infinito</strong></h4><p><br>Abaixo está o <em>loop</em> infinito na instrução While:</p><pre><code class="language-js">var infiVal = true;

while (infiVal) {
  // seu código
}</code></pre><p>Observação: <em>loops</em> infinitos podem travar o navegador, portanto, é necessário executar o laço em um intervalo de alguns milissegundos. Você pode usar o <strong>método do JavaScript setInterval</strong> para executar uma determinada função a cada 1.000 milissegundos. Veja o código abaixo:</p><pre><code class="language-js">var myVar = setInterval(myTimer, 1000);

function myTimer() {
  // seu código
}</code></pre><h3 id="4-o-la-o-do-while"><strong><strong><strong>4. </strong></strong>O laço<strong><strong> </strong></strong>"<em>d<strong><strong>o </strong></strong>w<strong><strong>hile</strong></strong></em>"<strong><strong> </strong></strong></strong></h3><p>No <strong>laço <em>do while</em></strong>, a condição a ser <strong>verificada é fornecida no final </strong>e, portanto, o laço é executado pelo menos uma vez, mesmo que a condição não seja verdadeira. Veja o código abaixo que dará uma mensagem 'Olá' na caixa de alerta, mesmo que a condição seja falsa desde o início (pois o valor da variável 'i' é sempre maior que 1).</p><pre><code class="language-js">var i = 2;

do {
    alert("Olá");
    i++;
}
while (i &lt; 1);</code></pre><h4 id="a-percorrendo-o-xml"><strong>a. Percorrendo o XML</strong></h4><p>Agora usarei o <strong>laço <em>do while</em></strong> para saber como <strong>percorrer o XML</strong> e extrair dados dele. Eu tenho um arquivo XML chamado 'XMLFile1.xml' com esse conteúdo:</p><pre><code class="language-xml">&lt;?xml version="1.0" encoding="utf-8" ?&gt;
&lt;cities&gt;
    &lt;city&gt;Washington DC&lt;/city&gt;    
    &lt;city&gt;Islamabad&lt;/city&gt;
    &lt;city&gt;Beijing&lt;/city&gt;
    &lt;city&gt;Tokyo&lt;/city&gt;
&lt;/cities&gt;</code></pre><p>Vou usar <strong>AJAX para ler esse arquivo XML</strong> e, em seguida, percorrê-lo com o laço <em>do while</em>. O código abaixo imprime todos os nomes das cidades (dados no arquivo XML) na janela do console.</p><pre><code class="language-js">var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function () {
    if (this.readyState == 4 &amp;&amp; this.status == 200) {
        myFunction(this);
    }
};
xhttp.open("GET", "XMLFile1.xml", true);
xhttp.send();

function myFunction(xml) {
    var xmlDoc = xml.responseXML;
    var cityNames = Array.from(xmlDoc.getElementsByTagName("city"));
    var i = 0;  
    
    do {
        console.log(cityNames[i].innerHTML);
        i++;
    }
    while (i &lt; cityNames.length);
}</code></pre><p><em><em>Ex</em>plicação</em>: Criei um objeto <strong>XMLHttpRequest </strong>para fazer a chamada AJAX. Quando o arquivo XML é lido, o evento chamado <strong>onreadystatechange</strong> é gerado, veja o código abaixo:</p><pre><code class="language-js">xhttp.onreadystatechange = function () {
    if (this.readyState == 4 &amp;&amp; this.status == 200) {
        myFunction(this);
    }
};</code></pre><p>Nesse evento, estou chamando minha função personalizada chamada <strong>myFunction()</strong>. Aqui, armazeno o conteúdo XML dentro de uma variável chamada <strong>xmlDoc</strong>:</p><p><code>var xmlDoc = xml.responseXML;</code></p><p>Converti todos os nomes das cidades em um <em>array</em>:</p><p><code>var cidadeNomes = Array.from(xmlDoc.getElementsByTagName("cidade"));</code></p><p>Por fim, percorro esse <em>array </em>de cidades usando o <strong>laço <em>do while</em></strong> e imprimo na janela do console o nome de cada cidade:</p><pre><code class="language-js">var i = 0;
do {
    console.log(cidadeNomes[i].innerHTML);
    i++;
}
while (i &lt; cidadeNomes.length);</code></pre><p>A imagem abaixo mostre a saída impressa no console:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/1_tzh2L8Ywe2ELU9GtmFznEA.png" class="kg-image" alt="1_tzh2L8Ywe2ELU9GtmFznEA" width="247" height="80" loading="lazy"><figcaption><strong>Valores do array cidadesNomes do XML</strong></figcaption></figure><h3 id="5-o-m-todo-foreach-"><strong><strong><strong>5. </strong></strong>O método<strong><strong> </strong></strong>"<strong><strong>.forEach()</strong></strong>"</strong></h3><p>A versão ES6 tem um método chamado <code>.forEach()</code> para percorrer um <em>array</em> de elementos. Você o achará muito útil ao lidar com <em>arrays</em>.</p><h4 id="a-percorrendo-um-array-com-o-m-todo-foreach-"><strong>a. P</strong>ercorrendo um <em>array</em> com o método .forEach()<strong>:</strong></h4><p>Nessa situação, percorro os elementos de um <em>array </em>com o método .forEach() e imprimo o <strong>índice</strong> e o <strong>valor </strong>de cada elemento na janela do console. Veja o código abaixo:</p><pre><code class="language-js">var nomes = ["jerry", "tom", "pluto", "micky", "mini"];
nomes.forEach(Function1);

function Function1(currentValue, index) {
    console.log("Indice atual do array é: " + index + " :: Valor é: " + currentValue);
}</code></pre><p><strong><strong>Function1</strong></strong> é o nome da função que é chamada para cada elemento do <em>array</em>. No meu caso, a função será chamada 5 vezes. Ela aceita 2 parâmetros — 'index' e 'value' do elemento atual.</p><p><strong><strong>Note</strong></strong> que você pode converter um objeto em um <em>array</em> usando o método <strong>Array.from().</strong></p><pre><code class="language-js">var linksArr = Array.from(links);</code></pre><h3 id="conclus-o"><strong><strong><strong>Conclu</strong></strong>são</strong></h3><p>Obrigado pela leitura deste tutorial. Espero que tenha ensinado algo novo sobre como lidar com laços em JavaScript. Agora, você pode aplicar qualquer uma de suas táticas de uso dos laços favoritas, descritas neste tutorial, em seu projeto da web.</p><blockquote>Publiquei outro tutorial no freeCodeCamp, caso você queira vê-lo também: <a href="https://medium.freecodecamp.org/how-to-create-a-login-feature-with-bootstrap-modal-and-jquery-ajax-53dc0d281609" rel="noopener">How to create a login feature with Bootstrap Modal and jQuery AJAX</a></blockquote><p>Mais uma vez, obrigado e bons estudos!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como fazer o seu primeiro pull request no GitHub ]]>
                </title>
                <description>
                    <![CDATA[  O que significa fork? Fork, ou bifurcação, é quando gostamos tanto do repositório de alguém e gostaríamos de tê-lo em nossa conta do GitHub, nós o copiamos para que possamos trabalhar com ele separadamente.  Quando copiamos um repositório, obtemos uma versão desse repositório inteiro com todo o seu ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-fazer-o-seu-primeiro-pull-request-no-github/</link>
                <guid isPermaLink="false">641e473402ec1d064260eac4</guid>
                
                    <category>
                        <![CDATA[ Git ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Viviane Martini ]]>
                </dc:creator>
                <pubDate>Tue, 09 May 2023 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/Untitled-design.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-make-your-first-pull-request-on-github-3/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to make your first pull request on&nbsp;GitHub</a>
      </p><p></p><h2 id="o-que-significa-fork"><strong>O que significa <em>fork</em>?</strong></h2><p><em>Fork</em>, ou bifurcação, é quando gostamos tanto do repositório de alguém e gostaríamos de tê-lo em nossa conta do GitHub, nós o copiamos para que possamos trabalhar com ele separadamente. </p><p>Quando copiamos um repositório, obtemos uma versão desse repositório inteiro com todo o seu histórico. Após a cópia, podemos fazer o que quisermos sem afetar a versão original.</p><h2 id="o-que-um-pull-request"><strong>O que é um <em>pull request</em>?</strong></h2><p>O<em> pull request </em>(algo como 'solicitação de envio', em português)<em> </em>é a maneira como contribuímos para projetos de grupo ou projetos de código aberto (<em>open source</em>). </p><p>Por exemplo, um usuário Harry copia um repositório de ThanoshanMV e faz alterações nesse repositório. Agora, Harry pode fazer um <em>pull request</em> para ThanoshanMV, mas cabe a ThanoshanMV aceitá-lo ou recusá-lo. É como dizer: "ThanoshanMV, você poderia aceitar minhas alterações, por favor?"</p><h2 id="o-que-significa-contribuir"><strong>O que significa contribuir</strong></h2><p>Podemos contribuir para um projeto <em>open source</em> de diversas maneiras, além do código. Algumas dessas maneiras são descritas abaixo.</p><p>Como diz o guia inicial de <em>hacktitude</em> da empresa de tecnologia <a href="https://www.99xtechnology.com/" rel="noopener">99xtechnology</a>, podemos contribuir para um projeto <em>open source</em> das seguintes maneiras:</p><ol><li>Design: você pode criar os <em>layouts </em>de um projeto para melhorar sua usabilidade, melhorar a navegação e o menu do projeto com base em programas de pesquisa do usuário, criar arte para logotipos ou camisetas e fornecer guias de estilo para o projeto.</li><li>Redação: você pode escrever e melhorar a documentação do projeto ou traduzir a documentação, iniciar um boletim informativo <em>(newsletter)</em> para o projeto ou escrever tutoriais para ele, selecionar destaques da lista de discussão ou analisar uma pasta de exemplos mostrando como os projetos são usados.</li><li>Organização: você pode vincular <em>issues</em> duplicadas, sugerir novos <em>labels</em> para as <em>issues</em>, sugerir o fechamento de <em>issues </em>antigas abertas e fazer perguntas sobre <em>issues </em>abertas recentemente para levar a discussão adiante.</li><li>Ajude os outros: responda a perguntas sobre <em>issues </em>em aberto, revise o código nos envios de outras pessoas e ofereça-se para orientar outro colaborador.</li><li>Código: ajude a resolver <em>issues</em> em aberto, pergunte se você pode fornecer novos recursos e melhorar ferramentas e testes.</li></ol><h2 id="vamos-fazer-nosso-primeiro-pull-request-"><strong>Vamos fazer nosso primeiro <em>pull request</em>!</strong></h2><p>Se você não está muito familiarizado com o Git e o GitHub, revise o seguinte material: <em><a href="https://www.freecodecamp.org/news/the-beginners-guide-to-git-github/">The beginner’s guide to Git &amp; GitHub</a></em> (texto em inglês)<em>.</em></p><h3 id="1-fa-a-uma-c-pia-do-reposit-rio"><strong>1. Faça uma cópia do repositório</strong></h3><p>Primeiro, copie o (faça o <em>fork do)</em> repositório. Basta clicar no botão <strong>Fork</strong> no topo da página. Isso vai criar uma versão de todo o repositório na sua conta.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/fork-1.png" class="kg-image" alt="fork-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/05/fork-1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/05/fork-1.png 636w" width="636" height="311" loading="lazy"></figure><h3 id="2-clone-o-reposit-rio"><strong>2. Clone o repositório</strong></h3><p>Quando o repositório estiver na sua conta, clone-o em sua máquina para trabalhar com ele localmente.</p><p>Para clonar, clique no botão<strong> Clone </strong>e copie o link.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/clone1.png" class="kg-image" alt="clone1" width="490" height="214" loading="lazy"></figure><p>Abra o terminal e execute o seguinte comando. Ele clonará o repositório localmente.</p><pre><code>$ git clone [link do github]</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/clone2.png" class="kg-image" alt="clone2" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/05/clone2.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/05/clone2.png 652w" width="652" height="175" loading="lazy"></figure><p>Agora, configuramos uma cópia da <em>branch master</em> do repositório principal no projeto on-line.</p><p>Precisamos ir para esse diretório clonado. Para isso, executamos este comando:</p><pre><code>$ cd [NOME DO REPOSITORIO]</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/clone3.png" class="kg-image" alt="clone3" width="462" height="74" loading="lazy"></figure><h3 id="3-crie-uma-branch"><strong>3. Crie uma <em>branch</em></strong></h3><p>É uma boa prática criar uma outra <em>branch</em> ao trabalhar com repositórios, seja em um pequeno projeto ou contribuindo para o trabalho de um grupo.</p><p>O nome da <em>branch </em>deve ser curto e deve refletir o trabalho que estamos fazendo</p><p>Agora crie uma <em>branch </em>usando o comando <code>git checkout</code>:</p><pre><code>$ git checkout -b [Nome da branch]</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/branch1.png" class="kg-image" alt="branch1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/05/branch1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/05/branch1.png 715w" width="715" height="85" loading="lazy"></figure><h3 id="4-fa-a-mudan-as-e-fa-a-o-commit-delas"><strong>4. Faça mudanças e faça o <em>commit </em>delas</strong></h3><p>Faça alterações essenciais no projeto e salve-o.</p><p>Em seguida, execute &nbsp;<code>git status</code> e você verá as alterações.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/status.png" class="kg-image" alt="status" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/05/status.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/05/status.png 715w" width="715" height="208" loading="lazy"></figure><p>Adicione essas alterações na <em>branch </em>que você acabou de criar usando o comando &nbsp;<code>git add</code>:</p><pre><code>$ git add .</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/add1.png" class="kg-image" alt="add1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/05/add1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/05/add1.png 714w" width="714" height="211" loading="lazy"></figure><p>Agora, confirme essas alterações usando o comando <code>git commit</code> :</p><pre><code>$ git commit -m "Adicionando um artigo à semana 02 dos artigos da semana."</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/commit.png" class="kg-image" alt="commit" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/05/commit.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/05/commit.png 717w" width="717" height="101" loading="lazy"></figure><h3 id="5-fa-a-o-push-das-mudan-as-para-o-github"><strong>5. Faça o <em>push </em>das mudanças para o GitHub</strong></h3><p>Para enviar as alterações para o GitHub, precisamos identificar o nome do repositório remoto.</p><pre><code>$ git remote</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/remote.png" class="kg-image" alt="remote" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/05/remote.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/05/remote.png 712w" width="712" height="83" loading="lazy"></figure><p>O nome deste repositório remoto é "<em>origin</em>". </p><p>Depois de identificar o nome do repositório remoto, podemos enviar/fazer um <em>push</em> com segurança essas alterações para o GitHub.</p><pre><code>git push origin [Nome da branch]</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/branch2.png" class="kg-image" alt="branch2" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/05/branch2.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/05/branch2.png 717w" width="717" height="306" loading="lazy"></figure><h3 id="6-criando-o-pull-request"><strong>6. Criando o <em>pull request</em></strong></h3><p>Vá para o seu repositório no GitHub e você verá um botão dizendo "<strong>Compare &amp; pull request</strong>". Clique nele.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/compare.png" class="kg-image" alt="compare" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/05/compare.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/05/compare.png 984w" sizes="(min-width: 720px) 720px" width="984" height="269" loading="lazy"></figure><p>Forneça os detalhes necessários sobre o que você fez (você pode fazer referência às issues usando "#"). Agora, envie o <em>pull request</em>.</p><p>Parabéns! Você acaba de fazer o seu primeiro <em>pull request</em>.🎉</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/pullRequest-1.png" class="kg-image" alt="pullRequest-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/05/pullRequest-1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/05/pullRequest-1.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/05/pullRequest-1.png 1071w" sizes="(min-width: 720px) 720px" width="1071" height="658" loading="lazy"></figure><p>Se seu <em>pull request</em> for aceito, você receberá um e-mail.</p><h3 id="7-sincronize-a-sua-vers-o-com-a-branch-master"><strong>7. Sincronize a sua versão com a <em>branch master</em> </strong></h3><p>Antes de enviar qualquer <em>pull request</em> para o repositório original, você deve sincronizar seu repositório com o original.</p><p>Mesmo se você não enviar um <em>pull request</em> para o repositório original, é melhor sincronizar seu repositório com o original, pois alguns recursos adicionais e correções de bugs podem ter sido feitos desde que você o copiou.</p><p>Siga estas etapas para atualizar/sincronizar essas alterações em sua <em>branch master</em>:</p><ol><li>Primeiro, verifique em qual <em>branch </em>você está.</li></ol><pre><code>$ git branch</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/branch4.png" class="kg-image" alt="branch4" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/05/branch4.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/05/branch4.png 715w" width="715" height="89" loading="lazy"></figure><p>Ele listará todas as <em>branches </em>e indicará a <em>branch </em>atual ou ativa em verde.</p><p>2. Alterne para a <em>branch </em>master. </p><pre><code>$ git checkout master</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/master9.png" class="kg-image" alt="master9" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/05/master9.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/05/master9.png 717w" width="717" height="89" loading="lazy"></figure><p>3. Adicione o repositório original como um repositório <em>upstream</em>.</p><p>Para extrair as alterações do repositório original para sua versão copiada, você precisa adicionar o repositório Git original como um repositório <em>upstream</em>.</p><pre><code>$ git remote add upstream [HTTPS]</code></pre><p>Aqui, [HTTPS] é o URL que você deve copiar do repositório do proprietário.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/owner-repo.png" class="kg-image" alt="owner-repo" width="471" height="208" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/remote-add.png" class="kg-image" alt="remote-add" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/05/remote-add.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/05/remote-add.png 825w" sizes="(min-width: 720px) 720px" width="825" height="46" loading="lazy"></figure><p>4. Faça o <em>fetch</em>/obtenha o repositório.</p><p>Busque todas as alterações do repositório original. Os <em>commits </em>para o repositório original serão armazenados em uma <em>branch </em>local chamada <em>upstream</em>/<em>master</em>.</p><pre><code>$ git fetch upstream</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/fetch.png" class="kg-image" alt="fetch" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/05/fetch.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/05/fetch.png 718w" width="718" height="98" loading="lazy"></figure><p>5. Faça o <em>merge</em>/mescle as <em>branches</em>.</p><p>Mescle as alterações do <em>upstream</em>/<em>master</em> em sua <em>branch master</em> local. Isso fará com que a <em>branch master</em> do seu <em>fork</em> seja sincronizada com o repositório <em>upstream </em>sem perder suas alterações locais.</p><pre><code>$ git merge upstream/master</code></pre><p>6. Faça o <em>push</em>/envie mudanças ao GitHub</p><p>Neste ponto, sua <em>branch </em>local é sincronizada com a <em>branch master </em>do repositório original. Se você deseja atualizar o repositório do GitHub, precisa enviar suas alterações.</p><pre><code>$ git push origin master</code></pre><p><strong>Observação<strong>:</strong></strong> depois de sincronizar o <em>fork </em>da sua <em>branch master </em>copiada, você pode remover esse repositório remoto, se desejar, mas você também precisará atualizar/sincronizar seu repositório no futuro, então é melhor mantê-lo.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/remote-dlt.png" class="kg-image" alt="remote-dlt" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/05/remote-dlt.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/05/remote-dlt.png 826w" sizes="(min-width: 720px) 720px" width="826" height="112" loading="lazy"></figure><pre><code>$ git remote rm [Nome remoto]</code></pre><h3 id="8-delete-a-branch-desnecess-ria"><strong>8. Delete a <em>branch </em>desnecessária</strong></h3><p>As <em>branches </em>são criadas para um propósito especial. Uma vez que esse objetivo é alcançado, essas <em>branches </em>não são necessárias, então você pode excluí-las.</p><pre><code>$ git branch -d [Nome da branch]</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/delete.png" class="kg-image" alt="delete" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/05/delete.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/05/delete.png 716w" width="716" height="157" loading="lazy"></figure><p>Você também pode excluir a versão dele no GitHub.</p><pre><code>git push origin --delete [Nome da branch]</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/05/last.png" class="kg-image" alt="last" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/05/last.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/05/last.png 796w" sizes="(min-width: 720px) 720px" width="796" height="132" loading="lazy"></figure><h2 id="conclus-o"><strong>Conclusão</strong></h2><p>O GitHub é uma ferramenta poderosa para controlar o histórico de versões. Todos podem contribuir com projetos <em>open source</em> fazendo <em>pull requests</em>. Contribuições nem sempre são código – existem outras maneiras de contribuir também. </p><p>Por fim, devo dizer que você não deve se preocupar se seus <em>pull requests</em> forem rejeitados. Os mantenedores gastam muito tempo melhorando seus projetos e sabem muito mais sobre seus projetos do que nós. Portanto, não se preocupe se sua solicitação não for mesclada.</p><blockquote>Mantenha-se forte, mantenha-se positivo e nunca desista.<br>― Roy T. Bennett, <a href="https://www.goodreads.com/work/quotes/49604402" rel="noopener">The Light in the Heart</a></blockquote><p>Este artigo foi publicado originalmente no <a href="https://medium.com/@mvthanoshan9/how-to-make-your-first-pull-request-on-github-9aefca5cc837">Medium</a>.</p><p>Você pode entrar em contato com o autor e se conectar com ele pelo <a href="https://twitter.com/ThanoshanMV" rel="noopener">Twitter</a>.<br><strong>Continue contribuindo com o mundo <em>open source</em>!</strong></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Vincule o JavaScript ao HTML usando o atributo script src ]]>
                </title>
                <description>
                    <![CDATA[ O atributo "src" em uma tag é o caminho para um arquivo ou recurso externo que você deseja vincular ao seu documento HTML.  Por exemplo, se você tiver seu próprio arquivo JavaScript personalizado chamado 'script.js' e se quiser adicionar funcionalidade à página HTML, adicione-o assim: <!DOCTYPE html> <html lang="en"> ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/vincule-o-javascript-ao-html-usando-o-atributo-script-src/</link>
                <guid isPermaLink="false">63c69c1e91baea05fef70b17</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Viviane Martini ]]>
                </dc:creator>
                <pubDate>Tue, 21 Mar 2023 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/03/5f9c9e93740569d1a4ca3dd8.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/link-javascript-to-html-with-the-src/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Link JavaScript to HTML with the script src Attribute</a>
      </p><p>O atributo "src" em uma tag é o caminho para um arquivo ou recurso externo que você deseja vincular ao seu documento HTML. </p><p>Por exemplo, se você tiver seu próprio arquivo JavaScript personalizado chamado 'script.js' e se quiser adicionar funcionalidade à página HTML, adicione-o assim:</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
  &lt;head&gt;
    &lt;title&gt;Exemplo do atributo src na tag script&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;

  &lt;script src="./script.js"&gt;&lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre><p>Assim, você apontará para um arquivo chamado 'script.js' que está no mesmo diretório que o arquivo .html. Você também pode vincular a outros diretórios usando '..' no caminho do arquivo.</p><figure class="kg-card kg-code-card"><pre><code>&lt;script src="../public/js/script.js"&gt;&lt;/script&gt;</code></pre><figcaption><em>Exemplo de como vincular a outros diretórios</em></figcaption></figure><p>Isso faz com que, para chegar ao arquivo desejado, se "pule" um nível de diretório – do diretório 'public' para o diretório 'js' e, depois, para o arquivo 'script.js'.</p><p>Você também pode utilizar o atributo 'src' para vincular arquivos .js externos hospedados por terceiros. Isso é usado se você não quiser baixar uma cópia local do arquivo. Cuide, no entanto, para o caso de o link ser alterado ou o acesso à rede estar desativado. Nessa situação, você não conseguirá vincular o arquivo externo que procura.</p><figure class="kg-card kg-code-card"><pre><code>&lt;script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"&gt;&lt;/script&gt;</code></pre><figcaption><em>Exemplo de link de um arquivo do jQuery</em></figcaption></figure><h4 id="mais-informa-es-"><strong><strong><strong>M</strong></strong>ais<strong><strong> </strong></strong>i<strong><strong>nfor</strong></strong>mações<strong><strong>:</strong></strong></strong></h4><p><a href="https://developer.mozilla.org/pt-BR/docs/Web/HTML/Element/script">Artigo da MDN sobre a tag script no HTML</a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Uma breve introdução à desestruturação de arrays na ES6 ]]>
                </title>
                <description>
                    <![CDATA[ Escrito por: Kevwe Ochuko A desestruturação em JavaScript é um método simplificado de extrair várias propriedades de um array, pegando a estrutura e desconstruindo-a, por meio de atribuições e usando uma sintaxe semelhante a dos array literals (arrays literais, em português). Cria-se um padrão que descreve o tipo de valor ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/uma-breve-introducao-a-desestruturacao-de-arrays-na-es6/</link>
                <guid isPermaLink="false">63b60e1bba60cc05f8ad1ab8</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Viviane Martini ]]>
                </dc:creator>
                <pubDate>Tue, 07 Mar 2023 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/03/1_5TN-55RU-eTfNlcDL2RR1g.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/array-destructuring-in-es6-30e398f21d10/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">A Brief Introduction to Array Destructuring in ES6</a>
      </p><p>Escrito por: Kevwe Ochuko</p><p>A<strong> d<strong>es</strong>estruturação </strong>em JavaScript é um método simplificado de extrair várias propriedades de um array, pegando a estrutura e desconstruindo-a, por meio de atribuições e usando uma sintaxe semelhante a dos <em>array literals </em>(arrays literais, em português).</p><p>Cria-se um padrão que descreve o tipo de valor que você espera e faz-se a atribuição. A desestruturação do array usa a posição.</p><p>Veja o trecho de código abaixo.</p><figure class="kg-card kg-code-card"><pre><code>var [primeiro, segundo, terceiro] = ["Laide", "Gabriel", "Jets"];</code></pre><figcaption><em>A sintaxe com desestruturação.</em></figcaption></figure><figure class="kg-card kg-code-card"><pre><code>var primeiro = "laide",
    segundo = "Gabriel",
    terceiro = "Jets</code></pre><figcaption><em>A sintaxe sem desestruturação.</em></figcaption></figure><blockquote>Você não pode usar números (variáveis do tipo Number) para desestruturar<em><em>. </em>Números gerarão um erro porque não podem ser nomes de variáveis.</em></blockquote><figure class="kg-card kg-code-card"><pre><code>var [1, 2, 3] = ["Laide", "Ola", "Jets"];</code></pre><figcaption><em>Esta sintaxe gera um erro.</em></figcaption></figure><p>A<strong> desestruturação</strong> tornou a extração de dados de um array muito simples e legível. Imagine tentar extrair dados de um array aninhado com 5 ou 6 níveis. Isso seria muito tedioso. Você usa um <em>array literal</em> no lado esquerdo da atribuição.</p><pre><code>var objetos = ["Mesa", "Cadeira", "Ventilador"];
var [a, b, c] = objetos;</code></pre><p>Ele pega cada variável no <em>array literal</em> no lado esquerdo e mapeia para o mesmo elemento no mesmo índice no array.</p><pre><code>console.log(a); //Resultado: Mesa
console.log(b); //Resultado: Cadeira
console.log(c); //Resultado: Ventilador</code></pre><p>A declaração e a atribuição podem ser feitas separadamente na desestruturação.</p><pre><code>var generoA, generoB;
[generoA, generoB] = ["Masculino", "Feminino"];</code></pre><p>Se o número de variáveis ​​passadas para os <em>array literals</em> de desestruturação for maior do que os elementos do array, as variáveis ​​que não forem mapeadas para nenhum elemento do array retornarão<em><em> </em></em><code>undefined</code><em><em>.</em></em></p><pre><code>var objetos = ["Mesa", "Cadeira", "Ventilador", "Tapete"];
var [a, b, c, d, e] = objetos;
console.log(c); //Resultado: Ventilador
console.log(d); //Resultado: Tapete
console.log(e); //Resultado: undefined</code></pre><p>Se o número de variáveis ​​passadas para os <em>array literals</em> de desestruturação for menor que os elementos no array, os elementos sem variáveis ​​a serem mapeadas serão deixados de lado. Não há nenhum tipo de erro.</p><pre><code class="language-js">var objetos = ["Mesa", "Cadeira", "Ventilador", "Tapete"];
var [a, b, c] = objetos;
console.log(c); //Resultado: Ventilador</code></pre><h3 id="desestruturando-arrays-retornados">Desestruturando arrays retornados</h3><p>A desestruturação deixa o trabalho com uma função que retorna um array mais preciso. Funciona para todos os iteráveis.</p><pre><code>function corredores(){
    return ["Sandra", "Ola", "Chi"];
}

var [a, b, c] = corredores();
console.log(a); //Resultado: Sandra
console.log(b); //Resultado: Ola
console.log(c); //Resultado: Chi</code></pre><h3 id="valor-padr-o"><strong>Valor padrão</strong></h3><p>A desestruturação permite que um valor padrão (ou <em>default</em>) seja atribuído a uma variável se nenhum valor ou <code><em><em>undefined</em></em></code><em><em> </em></em>é passado. É como fornecer um<em> </em>substituto quando nada é encontrado.</p><pre><code>var a, b;
[a = 40, b = 4] = [];
console.log(a); //Resultado: 40
console.log(b); //Resultado: 4

[a = 40, b = 4] = [1, 23];
console.log(a); //Resultado: 1
console.log(b); //Resultado: 23</code></pre><p>Os valores padrão também podem se referir a outras variáveis, incluindo aquelas no mesmo <em>array literal</em>.</p><pre><code>var [primeiro = "Cotlin", segundo = primeiro] = [];
console.log(primeiro); //Resultado: Cotlin
console.log(segundo); //Resultado: Cotlin

var [primeiro = "Cotlin", segundo = primeiro] = ["Koku"];
console.log(primeiro); //Resultado: Koku
console.log(segundo); //Resultado: Koku

var [primeiro = "Cotlin", segundo = primeiro] = ["Koku", "Lydia"];
console.log(primeiro); //Resultado: Koku
console.log(segundo); //Resultado: Lydia</code></pre><h3 id="ignorando-alguns-valores"><strong><strong>Igno</strong>rando alguns<strong> </strong>v<strong>al</strong>ores</strong></h3><p><br>A desestruturação permite mapear uma variável para os elementos nos quais você está interessado. Você pode ignorar ou pular os outros elementos do array usando vírgulas à direita.</p><pre><code>var a, b;
[a, , b] = ["Lordy", "Crown", "Roses"];

console.log(a); //Resultado: Lordy
console.log(b); //Resultado: Roses</code></pre><h3 id="o-p-rametro-rest-e-a-sintaxe-de-spread"><strong>O pârametro<strong><strong><strong> Rest </strong></strong></strong>e<strong><strong><strong> </strong></strong></strong>a sintaxe de <em>s<strong><strong><strong>pread</strong></strong></strong></em><strong><strong><strong> </strong></strong></strong></strong></h3><p><br>O novo operador <em><em><em><em>(…)</em></em> </em></em>que foi adicionado no ES6 pode ser usado na desestruturação. Se o operador <em><em><em><em>(…) </em></em></em></em>aparecer no lado esquerdo na desestruturação, então ele é um <strong><a href="https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Functions/rest_parameters">PARÂMETRO R<strong><strong><strong>EST</strong></strong></strong></a><strong><strong><strong>.</strong></strong></strong></strong> Um pârâmetro rest é usado para mapear todos os elementos restantes no array que não foram mapeados para a própria variável <em>rest</em>. É como se fosse juntando o que ficou para trás. A variável <em>rest </em>deve ser sempre a última. Caso contrário, um <code>SyntaxError</code> aparece.</p><pre><code>var planetas = ["Mercúrio", "Terra", "Vênus", "Marte", "Plutão", "Saturno"];
var [primeiro, , terceiro, ...outros] = planetas;

console.log(primeiro); //Resultado: Mercúrio
console.log(terceiro); //Resultado: Vênus
console.log(outros); //Resultado: ["Marte", "Plutão", "Saturno"]</code></pre><p> Se o operador (…) aparecer à direita na desestruturação, então essa é uma <strong><a href="https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Operators/Spread_syntax"><strong>S</strong>INTAXE DE S<strong>PREAD</strong></a>. </strong>Ela pega todos os outros elementos do array que não têm nenhuma variável mapeada para eles e, em seguida, mapeia para a variável restante.</p><pre><code>var planetas = ["Mercúrio", "Terra", "Vênus", "Marte", "Plutão", "Saturno"];

var [primeiro, segundo, ...resto] = ["Mercúrio", "Terra", ...planetas, "Saturno"];

console.log(primeiro); //Resultado: Mercúrio
console.log(segundo); //Resultado: Terra
console.log(resto); //Resultado: ["Vênus", "Marte", "Plutão", "Saturno"]</code></pre><p>Caso você possa ter mais variáveis ​​no lado esquerdo, ele mapeia os elementos únicos no array igualmente para as variáveis.</p><pre><code class="language-js">var planetas = ["Mercúrio", "Terra", "Vênus", "Marte", "Plutão", "Saturno"];

var [primeiro, segundo, ...resto] = ["Mercúrio", ...planetas];

console.log(primeiro); //Resultado: Mercúrio
console.log(segundo); //Resultado: Mercúrio
console.log(resto); //Resultado: ["Terra", "Vênus", "Marte", "Plutão", "Saturno"]

var planetas = ["Mercúrio", "Terra", "Vênus", "Marte", "Plutão", "Saturno"];

var [primeiro, segundo, terceiro, quarto ...resto] = ["Mercúrio", "Terra", ...planetas];

console.log(primeiro); //Resultado: Mercúrio
console.log(segundo); //Resultado: Terra
console.log(terceiro); //Resultado: Mercúrio
console.log(quarto); //Resultado: Terra
console.log(resto); //Resultado: ["Vênus", "Marte", "Plutão", "Saturno"]</code></pre><h3 id="mudando-ou-trocando-vari-veis"><strong>Mudando<strong><strong><strong> </strong></strong></strong>ou<strong><strong><strong> </strong></strong></strong>trocando variáveis</strong></h3><p>Uma expressão de desestruturação pode ser usada para trocar os valores de duas variáveis.</p><pre><code>var a, b;
[a, b] = ["Masculino", "Feminino"];
[a, b] = [b, a];

console.log(a); //Resultado: Feminino
console.log(b); //Resultado: Masculino</code></pre><h3 id="desestrutura-o-de-arrays-aninhados"><strong>D<strong>es</strong>es<strong>t</strong>ruturação de arrays aninhados</strong></h3><p>Você também pode fazer a desestruturação de arrays aninhados. O item correspondente deve ser um array, para assim usar um <em>array literal</em> aninhado na desestruturação para atribuir itens às variáveis ​​locais.</p><pre><code>var numeros = [8, [1, 2, 3], 10, 12];
var  [a, [d, e, f]] = numeros;

console.log(a); // Resultado: 8
console.log(d); // Resultado: 1
console.log(e); // Resultado: 2</code></pre><h3 id="desestrutura-o-m-ltipla-de-arrays"><strong>D<strong>es</strong>es<strong>t</strong>ruturação múltipla de arrays</strong></h3><p>Você pode desestruturar um array mais de uma vez no mesmo trecho de código.</p><pre><code>var posicoes = ["primeiro", "segundo", "terceiro", "quarto"];
var [a, b, , d] = [f, ...resto] = posicoes;

console.log(a); //Resultado: primeiro
console.log(d); //Resultado: quarto
console.log(f); //Resultado: primeiro
console.log(resto); //Resultado: ["segundo", "terceiro", "quarto"]</code></pre><h3 id="conclus-o"><strong><strong><strong><strong>Co</strong></strong>nclusão</strong></strong></h3><p>Você pode copiar e colar o código no site do <a href="https://babeljs.io/en/repl.html#?babili=false&amp;browsers=&amp;build=&amp;builtIns=false&amp;spec=false&amp;loose=false&amp;code_lz=Q&amp;debug=false&amp;forceAllTransforms=false&amp;shippedProposals=false&amp;circleciRepo=&amp;evaluate=false&amp;fileSize=false&amp;timeTravel=false&amp;sourceType=module&amp;lineWrap=true&amp;presets=es2015%2Ces2016%2Creact%2Cstage-2&amp;prettier=false&amp;targets=&amp;version=6.26.0&amp;envVersion=" rel="noopener">Babel</a> para ver como seria o código se a desestruturação não existisse. Você teria escrito mais linhas de código! Com a desestruturação, tudo ficará mais simples.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ React.js: implemente o recurso de  arrastar e soltar sem usar bibliotecas externas ]]>
                </title>
                <description>
                    <![CDATA[ Aprenda os detalhes da implementação do recurso de arrastar e soltar (em inglês,  drag and drop) no React do zero. Vamos primeiro ver o resultado do que vamos construir. Estou testando o .gif — espero que funcione em todos os lugares como esperado. Usei para criá-lo o  Camtasia ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/react-js-implemente-o-recurso-de-arrastar-e-soltar-sem-usar-bibliotecas-externas/</link>
                <guid isPermaLink="false">635c03f27e77d305f28d7774</guid>
                
                    <category>
                        <![CDATA[ React ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Viviane Martini ]]>
                </dc:creator>
                <pubDate>Sun, 25 Dec 2022 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/1_hPLhe5cqPbyE8Hi4CGQMYg.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/reactjs-implement-drag-and-drop-feature-without-using-external-libraries-ad8994429f1a/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">React.js: implement the drag and drop feature without using external libraries</a>
      </p><p><strong>Aprenda os detalhes da implementação do recurso de arrastar e soltar (em inglês, <em>drag and drop</em>) no React do zero.</strong></p><p>Vamos primeiro ver o resultado do que vamos construir. Estou testando o .gif — espero que funcione em todos os lugares como esperado. Usei para criá-lo o <a href="https://discover.techsmith.com/camtasia-brand-desktop-features-logos-april/?gclid=EAIaIQobChMIn67LrPXp2gIVk7rACh0hjgr7EAAYASAAEgJWa_D_BwE" rel="noopener">Camtasia</a> com uma licença pessoal.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/1_Y11YSJEJ9A4JFGllOQSroQ.gif" class="kg-image" alt="1_Y11YSJEJ9A4JFGllOQSroQ" width="800" height="450" loading="lazy"><figcaption>Ignore a interface de UI e os estilos, por favor!</figcaption></figure><p>Os principais pontos de aprendizagem são:</p><ol><li>Tornar um elemento "arrastável" adicionando o atributo "draggable"</li><li>Tornar uma área "soltável" implementando o evento "dragover"</li><li>Capturar os dados para arrastar implementando o evento "dragstart"</li><li>Capturar o momento de soltar implementando o evento "drop"</li><li>Implementar o evento "drag" que é acionado enquanto o elemento está sendo arrastado</li><li>Armazenar os dados intermediários no objeto <em>dataTransfer</em></li></ol><p><strong>Passo 1 — </strong>crie o aplicativo raiz para a demonstração</p><p>Todo o código para arrastar e soltar estarrá no componente <code>AppDragDropDemo.js</code>.</p><pre><code class="language-js">import React from 'react';import ReactDOM from 'react-dom';import '.index.css';import AppDr</code></pre><pre><code>ReactDOM.render(&lt;AppDragDropDemo /&gt;,     document.getElementById("root"));</code></pre><p>O ponto de entrada para o <code>AppDragDropDemo</code> tem a seguinte aparência no código:</p><pre><code>import React, { Component } from 'react';</code></pre><pre><code>export default class AppDragDropDemo extends Component {
	render () {
    	return (&lt;div className="container-drag"&gt;DRAG &amp; DROP DEMO&lt;/div&gt;);
    }
}</code></pre><p>Se você executar agora a aplicação, você verá esta tela:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/1_16qtjJ6Bh53hsY2z4oi2gw.png" class="kg-image" alt="1_16qtjJ6Bh53hsY2z4oi2gw" width="399" height="106" loading="lazy"></figure><h3 id="passo-2-crie-o-estado-do-objeto-para-armazenar-algumas-tarefas"><strong>Passo 2 — crie o estado do objeto </strong>para armazenar algumas tarefas</h3><p>Vamos criar algumas tarefas para simular uma aplicação simples. O que pretendemos fazer é arrastar e soltar essas tarefas em diferentes categorias como <code>wip</code>, <code>complete</code> &nbsp;e assim por diante.</p><pre><code>export default class AppDragDropDemo extends Component {
	state = {
    	tasks: [{
        	name:"Learn Angular",
            category:"wip",
            bgcolor: "yellow"
            },
            {
            name:"React",
            category:"wip",
            bgcolor:"pink"
            },
            {
            name:"Vue",
            category:"complete",
            bgcolor:"skyblue"
            }
        ]
    }
    render () {
    	return (&lt;div className="container-drag"&gt;DRAG &amp; DROP DEMO&lt;/div&gt;);}
    }
}</code></pre><h3 id="passo-3-organize-os-dados-em-categorias"><strong>Passo 3 — </strong>organize os dados em categorias</h3><p>Vamos implementar o código abaixo no método <code>render</code> para agrupar as tarefas em suas respectivas categorias, <code>wip</code> e <code>complete</code>. Sinta-se à vontade para adicionar mais categorias e brincar com o código.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/1_u7edSd4vxCBW_JMnA1qbYA.png" class="kg-image" alt="1_u7edSd4vxCBW_JMnA1qbYA" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/1_u7edSd4vxCBW_JMnA1qbYA.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/1_u7edSd4vxCBW_JMnA1qbYA.png 666w" width="666" height="380" loading="lazy"></figure><p>Você pode copiar e colar o código que aparece acima no código abaixo.</p><pre><code>render() {
	var tasks = {
    	wip: [],
        complete: []
        }
    this.state.tasks.forEach ((t) =&gt; {
    	tasks[t.category].push(&lt;div key={t.name) onDragStart={(e)=&gt;this.onDragStart(e, t.name)} draggable className="draggable" style={{backgroundColor: t.bgcolor}}&gt;{t.name}&lt;/div&gt;);
    }
};</code></pre><p>No código acima, estamos percorrendo todas as tarefas, criando uma <code>div</code> para cada item de tarefa e armazenando-o nas respectivas categorias.</p><p>Assim, o <code>wip[]</code> contém todas as tarefas na categoria <code>wip</code> e <code>complete[]</code> contém todas as tarefas concluídas.</p><h3 id="passo-4-torne-o-item-da-tarefa-arrast-vel"><strong>Passo 4 — </strong>torne o item da tarefa arrastável</h3><p>Adicione o atributo arrastável a <code>&lt;div&gt;</code> ou a qualquer elemento para tornar um elemento arrastável. Consulte o bloco de código abaixo para obter o formato de texto do código.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/1_UZ8KT2yWKAQBv_wvvuZNLA.png" class="kg-image" alt="1_UZ8KT2yWKAQBv_wvvuZNLA" width="563" height="261" loading="lazy"></figure><h3 id="passo-5-crie-um-cont-iner-solt-vel"><strong>Passo 5 — crie um </strong>contêiner "soltável"</h3><p>Para criar um contêiner "soltável", implemente o <code>evento dragover</code>. Agora, como queremos desabilitar o padrão (default) do evento dragover, vamos chamar <code>event.preventDefault()</code> nele.</p><p>Também renderizaremos <code>{tasks.wip}</code> e <code>{tasks.complete}</code> em seus elementos <code>div</code> correspondentes.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/1_muabAA2HIbX14VtSFvKG6g.png" class="kg-image" alt="1_muabAA2HIbX14VtSFvKG6g" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/1_muabAA2HIbX14VtSFvKG6g.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/1_muabAA2HIbX14VtSFvKG6g.png 800w" sizes="(min-width: 720px) 720px" width="800" height="336" loading="lazy"></figure><pre><code>return (&lt;div className="container-drag"&gt;
			&lt;h2 className="header"&gt;DRAG &amp; DROP DEMO&lt;/h2&gt;
			&lt;div className="wip" onDragOver={(e)=&gt;this.onDragOver(e)} onDrop={(e)=&gt;{this.onDrop(e, "wip")}}&gt;
            	&lt;span className="task-header"&gt;WIP&lt;/span&gt;
                {tasks.wip}
        	&lt;/div&gt;
        	&lt;div className="droppable" onDragOver={(e)=&gt;this.onDragOver(e)} onDrop={(e)=&gt;this.onDrop(e, "complete")}&gt;
        		&lt;span className="task-header"&gt;COMPLETED&lt;/span&gt;
                {tasks.complete}
			&lt;/div&gt;
        &lt;/div&gt;);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/1_hNDl0tztfkDNddbIN4cVew.png" class="kg-image" alt="1_hNDl0tztfkDNddbIN4cVew" width="464" height="75" loading="lazy"></figure><p>Vamos, agora, implementar o manipulador de eventos <code>onDragOver()</code>.</p><p>A resultado até agora será semelhante à figura abaixo.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/1_fHaKQZ_1Iw0J1bFlIufbTw.png" class="kg-image" alt="1_fHaKQZ_1Iw0J1bFlIufbTw" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/1_fHaKQZ_1Iw0J1bFlIufbTw.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/1_fHaKQZ_1Iw0J1bFlIufbTw.png 800w" sizes="(min-width: 720px) 720px" width="800" height="216" loading="lazy"></figure><h3 id="passo-6-capture-o-estado-do-elemento-que-est-sendo-arrastado"><strong>Passo 6 — </strong>capture o estado do elemento que está sendo arrastado</h3><p>Vamos modificar o código onde estamos criando a categoria para cada tarefa. Adicione um manipulador de evento <code>ondragstart</code> e passe o id/nome ou qualquer informação que você precise persistir enquanto o arrastar/soltar está acontecendo.</p><p>Estou usando <code>name</code> como um valor único para identificar a tarefa. Sinta-se à vontade para usar o ID ou qualquer chave exclusiva que você tenha.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/1_nX-KfIY37q0S_mRELKu1Hg.png" class="kg-image" alt="1_nX-KfIY37q0S_mRELKu1Hg" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/1_nX-KfIY37q0S_mRELKu1Hg.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/1_nX-KfIY37q0S_mRELKu1Hg.png 698w" width="698" height="297" loading="lazy"></figure><p>Vamos agora implementar o manipulador de eventos <code>onDragStart</code>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/1_TkXlaYt3owLXnQKhSp-yVw.png" class="kg-image" alt="1_TkXlaYt3owLXnQKhSp-yVw" width="523" height="208" loading="lazy"></figure><p>No manipulador <code>onDragStart</code>, pegamos o parâmetro e o armazenamos no objeto <code>dataTransfer</code>. Não se confunda com a nomenclatura do parâmetro, pois acho que estava em outro mundo quando codifiquei isso. :)</p><p><strong>Observação para o Internet Explorer</strong>: isso pode não funcionar com o IE. Para ele, a melhor prática é fornecer o formato como a chave, conforme mostrado abaixo.</p><p>Em vez de</p><pre><code>ev.dataTransfer.setData("id", id)</code></pre><p>use</p><pre><code>ev.dataTransfer.setData(“text/plain”,id)</code></pre><p>O manipulador acima garantirá que o elemento que está sendo arrastado seja armazenado no evento do objeto e esteja disponível para uso quando necessário. Pode ser necessário ao soltar em um destino.</p><p>Agora, se você executar o aplicativo e arrastar os elementos, os seguintes logs serão gerados.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/1_T9eejIeJ6gZJGWFoLxXxgg.png" class="kg-image" alt="1_T9eejIeJ6gZJGWFoLxXxgg" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/1_T9eejIeJ6gZJGWFoLxXxgg.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/1_T9eejIeJ6gZJGWFoLxXxgg.png 800w" sizes="(min-width: 720px) 720px" width="800" height="343" loading="lazy"></figure><h3 id="passo-7-manipule-o-evento-de-soltar-drop-"><strong>Passo 7 — manipule o evento de soltar (drop)</strong></h3><p>Vamos abrir o método de renderizar e adicionar o evento <code>onDrop</code> na <code>div</code> com a <code>className</code> <code>droppable</code>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/1_Ww-IahlxEBq5Y6LTSsbZjw.png" class="kg-image" alt="1_Ww-IahlxEBq5Y6LTSsbZjw" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/1_Ww-IahlxEBq5Y6LTSsbZjw.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/1_Ww-IahlxEBq5Y6LTSsbZjw.png 776w" sizes="(min-width: 720px) 720px" width="776" height="421" loading="lazy"></figure><p>No código acima, adicionamos o evento de manipulação <code>drop</code> e passamos a categoria obrigatória <code>complete</code> como argumento. &nbsp;Isso indica que estamos "soltando" o elemento do estado <code>wip</code> &nbsp;no estado <code>complete</code> (categoria). Sinta-se à vontade para alterar os nomes, conforme necessário.</p><p>Vamos agora implementar o manipulador de eventos <code>onDrop()</code>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/1_hLHULfBCgIXe2f9XeWnrGw.png" class="kg-image" alt="1_hLHULfBCgIXe2f9XeWnrGw" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/1_hLHULfBCgIXe2f9XeWnrGw.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/1_hLHULfBCgIXe2f9XeWnrGw.png 772w" sizes="(min-width: 720px) 720px" width="772" height="464" loading="lazy"></figure><p>Aqui está o código que você pode copiar/colar:</p><pre><code>onDrop = (ev, cat) =&gt; {
	let id = ev.dataTransfer.getData("id");
    let tasks = this.state.tasks.filter((task) =&gt; {
    	if (task.name == id) {
        	task.category = cat;
        }
     	return task;
     });
     this.setState({
     	...this.state,
        tasks
     });
}</code></pre><p>No manipulador de eventos <code>onDrop</code>, pegamos a tarefa que está sendo arrastada usando o método <code>getData</code> no evento do objeto <code>dataTransfer</code>.</p><p>Em seguida, criamos um array de tarefas usando o método de filtro e alteramos a categoria da tarefa que está sendo arrastada.</p><p><code>setState()</code> acionará a renderização e as tarefas serão renderizadas nas áreas corretas.</p><p><strong>Observação para o Internet Explorer</strong>: para fazê-lo funcionar no IE, use o método <code>getData</code> abaixo.</p><p>Ao invés de</p><pre><code>var id = ev.dataTransfer.getData("id")</code></pre><p>use</p><pre><code>var id = ev.dataTransfer.getData("text")</code></pre><h3 id="passo-8-para-implementar-o-soltar-drop-de-complete-para-wip-adicione-o-manipulador-ondropto"><strong>Passo 8 — </strong>para implementar o soltar (drop) de "complete" para "wip", adicione o manipulador onDrop<strong>to </strong></h3><p>O manipulador <code>onDrop()</code> permanece o mesmo de antes.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/1_sZtINZCL07rVeEsYYogmVg.png" class="kg-image" alt="1_sZtINZCL07rVeEsYYogmVg" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/11/1_sZtINZCL07rVeEsYYogmVg.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/11/1_sZtINZCL07rVeEsYYogmVg.png 783w" sizes="(min-width: 720px) 720px" width="783" height="434" loading="lazy"></figure><p>Por fim, execute o código, admire sua criação e divirta-se enquanto programa. :)</p><p>Você pode pegar o código-fonte <a href="https://github.com/rajeshpillai/youtube-react-components/blob/master/src/AppDragDropDemo.js">aqui</a>.</p><p><strong>Observação<strong>:</strong> </strong>para que isso funcione em vários navegadores, altere o tipo de <code>setData</code> para string. Por exemplo, para definir dados, use <code><strong><strong>ev.dataTransfer.setData(</strong>"<strong>text/plain</strong>"<strong>,id)</strong></strong></code><strong><strong>. </strong></strong>Para ler o dado, use <code><strong><strong>var id = ev.dataTransfer.getData(</strong>"<strong>text</strong>"<strong>)</strong></strong></code><strong>.</strong></p><p>Como meu objetivo era demonstrar os principais recursos de arrastar e soltar, o código não foi otimizado para fatores como design e convenções de nomenclatura.</p><p>Aprenda com o autor em @Learner + Fullstack Coach (@rajeshpillai): <a href="https://twitter.com/rajeshpillai" rel="noopener">https://twitter.com/rajeshpillai</a></p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
