<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Gabriel Lopes</title>
    <description>The latest articles on DEV Community by Gabriel Lopes (@dev_gabriellopes).</description>
    <link>https://dev.to/dev_gabriellopes</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F907835%2Fa9202bb0-2bbf-4cde-ac5b-d14d74ffa136.jpeg</url>
      <title>DEV Community: Gabriel Lopes</title>
      <link>https://dev.to/dev_gabriellopes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dev_gabriellopes"/>
    <language>en</language>
    <item>
      <title>Melhores práticas de colaboração em equipe: Padronização de Commits, Code Review e Fluxo de Pull Requests</title>
      <dc:creator>Gabriel Lopes</dc:creator>
      <pubDate>Thu, 15 Jun 2023 16:41:38 +0000</pubDate>
      <link>https://dev.to/dev_gabriellopes/melhores-praticas-de-colaboracao-em-equipe-padronizacao-de-commits-code-review-e-fluxo-de-pull-requests-2d0l</link>
      <guid>https://dev.to/dev_gabriellopes/melhores-praticas-de-colaboracao-em-equipe-padronizacao-de-commits-code-review-e-fluxo-de-pull-requests-2d0l</guid>
      <description>&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;No mundo do desenvolvimento de software, a colaboração eficiente entre membros da equipe é fundamental para garantir a qualidade do código e o sucesso do projeto. Neste artigo, vamos explorar três práticas essenciais para uma colaboração efetiva: padronização de commits, code review e o fluxo de Pull Requests (PR).&lt;/p&gt;

&lt;h2&gt;
  
  
  Padronização de Commits: Clareza e Consistência
&lt;/h2&gt;

&lt;p&gt;A padronização de commits é uma prática que visa tornar as mensagens de commit mais claras, concisas e fáceis de entender. Ao adotar um formato padrão, como o Conventional Commits, os membros da equipe podem ter uma visão rápida e precisa das alterações realizadas. O formato básico consiste em um tipo, um escopo opcional e uma descrição. Por exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;feat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;login&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;Adiciona&lt;/span&gt; &lt;span class="nx"&gt;validação&lt;/span&gt; &lt;span class="nx"&gt;de&lt;/span&gt; &lt;span class="nx"&gt;senha&lt;/span&gt; &lt;span class="nx"&gt;no&lt;/span&gt; &lt;span class="nx"&gt;formulário&lt;/span&gt; &lt;span class="nx"&gt;de&lt;/span&gt; &lt;span class="nx"&gt;login&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Essa padronização permite uma navegação mais fácil pelo histórico de alterações e uma melhor compreensão das modificações realizadas.&lt;/p&gt;

&lt;p&gt;Além disso, é recomendado utilizar ferramentas como o Git Hooks para automatizar a verificação da padronização dos commits, garantindo que todas as mensagens estejam de acordo com as diretrizes estabelecidas pela equipe.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code Review: Aperfeiçoando o Código em Equipe
&lt;/h2&gt;

&lt;p&gt;O code review é uma prática na qual os membros da equipe revisam o código escrito por seus colegas antes de ser mesclado no ramo principal do repositório. Essa prática traz vários benefícios, como a identificação de erros e problemas de lógica, melhorias na qualidade do código e a troca de conhecimento entre os membros da equipe.&lt;/p&gt;

&lt;p&gt;Durante o code review, os revisores examinam o código, analisam sua legibilidade, aderência às boas práticas e fornecem feedback construtivo. É importante estabelecer diretrizes claras para o code review, como prazos para revisão, critérios de aceitação e boas práticas específicas para o projeto. Ferramentas como o GitHub e o GitLab geralmente oferecem recursos para facilitar o processo de code review, permitindo comentários diretamente no código e discussões sobre as alterações propostas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fluxo de Pull Requests: Facilitando a Colaboração
&lt;/h2&gt;

&lt;p&gt;O fluxo de Pull Requests é um processo de colaboração em equipe que permite que as alterações sejam revisadas e mescladas de forma controlada. Esse fluxo geralmente envolve os seguintes passos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Clone o repositório&lt;/strong&gt;: Comece clonando o repositório do projeto em sua máquina local.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Crie uma branch&lt;/strong&gt;: Crie uma nova branch a partir do ramo principal do repositório.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Faça suas alterações&lt;/strong&gt;: Realize as alterações desejadas nos arquivos do projeto.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adicione e faça commit das alterações&lt;/strong&gt;: Adicione os arquivos modificados ao índice de commit e faça o commit das alterações com uma mensagem descritiva.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Envie suas alterações&lt;/strong&gt;: Envie suas alterações para o repositório remoto na sua branch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Crie o Pull Request&lt;/strong&gt;: Acesse o repositório no serviço de hospedagem Git e crie um novo Pull Request, preenchendo as informações necessárias.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aguarde a revisão&lt;/strong&gt;: Aguarde a revisão e o feedback dos outros membros da equipe.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Realize as alterações&lt;/strong&gt;: Se forem solicitadas alterações durante a revisão, faça as modificações necessárias em sua branch local e envie novamente para o repositório remoto.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Merge do Pull Request&lt;/strong&gt;: Após a revisão e a aprovação do Pull Request, um membro com permissões suficientes pode mesclar as alterações no ramo principal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Atualize sua branch local&lt;/strong&gt;: Atualize sua branch local com as alterações mescladas.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Essa abordagem promove uma colaboração transparente, facilita a discussão e mantém um histórico claro das alterações realizadas. Além disso, pode ajudar a evitar conflitos de código e garantir a integridade do projeto.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão: Melhorando a Colaboração em Equipe
&lt;/h2&gt;

&lt;p&gt;A colaboração eficiente entre os membros da equipe é essencial para o sucesso de qualquer projeto de desenvolvimento de software. Ao adotar a padronização de commits, realizar o code review e seguir o fluxo de Pull Requests, é possível aprimorar a qualidade do código, promover a troca de conhecimento e garantir um histórico claro das alterações realizadas.&lt;/p&gt;

&lt;p&gt;Ao implementar essas práticas, as equipes de desenvolvimento podem alcançar uma colaboração mais efetiva, resultando em um código mais robusto, consistente e de alta qualidade. Lembre-se de adaptar essas práticas de acordo com as necessidades e particularidades de cada projeto, sempre buscando o aprimoramento contínuo da equipe e do código produzido.&lt;/p&gt;

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

&lt;p&gt;Git hooks: &lt;a href="https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks" rel="noopener noreferrer"&gt;https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Conventinal commits: &lt;a href="https://www.conventionalcommits.org/en/v1.0.0/" rel="noopener noreferrer"&gt;https://www.conventionalcommits.org/en/v1.0.0/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pull Requests: &lt;a href="https://coodesh.com/blog/dicionario/o-que-e-pull-request-pr/" rel="noopener noreferrer"&gt;https://coodesh.com/blog/dicionario/o-que-e-pull-request-pr/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>github</category>
    </item>
    <item>
      <title>Controlled components vs Uncontrolled components no React</title>
      <dc:creator>Gabriel Lopes</dc:creator>
      <pubDate>Tue, 28 Mar 2023 17:45:38 +0000</pubDate>
      <link>https://dev.to/dev_gabriellopes/controlled-components-vs-uncontrolled-components-no-react-2ii4</link>
      <guid>https://dev.to/dev_gabriellopes/controlled-components-vs-uncontrolled-components-no-react-2ii4</guid>
      <description>&lt;p&gt;O "form" é um dos elementos mais populares em HTML para fazer sites. Quando o React foi lançado, ele mudou a maneira como lidamos com os formulários em muitos aspectos.&lt;/p&gt;

&lt;p&gt;No React, existem duas formas de trabalhar com dados de formulário em nossos componentes. A primeira forma é usando o "estado" para manipular os dados do formulário, o que chamamos de "Controlled Components". A segunda forma é deixando a própria DOM lidar com os dados do formulário, sem intervenção direta do componente - isso é chamado de "Uncontrolled Components".&lt;/p&gt;

&lt;p&gt;Neste artigo, vou explicar a diferença entre esses dois tipos de componentes no React, usando exemplos práticos.&lt;/p&gt;

&lt;h3&gt;
  
  
  O que são Controlled Components?
&lt;/h3&gt;

&lt;p&gt;Controlled Components no React são aqueles onde os dados são controlados pelo estado do componente.&lt;/p&gt;

&lt;p&gt;Os formulários são usados para guardar informações em um documento, geralmente para enviar ao servidor fazer alguma coisa. E essas informações são guardadas por elementos de entrada de formulário, como input, textarea, select, e outros que controlam o estado ou valor deles.&lt;/p&gt;

&lt;p&gt;Onde eu quero chegar?&lt;/p&gt;

&lt;p&gt;Sabe quando preenchemos um formulário na internet? Cada campo tem um valor que pode ser digitado pelo usuário ou selecionado através de um menu. Quando mudamos o valor de um campo, o estado dele também muda.&lt;/p&gt;

&lt;p&gt;Para conseguir o valor de um campo, usamos uma propriedade do próprio campo. Também podemos usar essa propriedade para definir valores nos campos do formulário. Ela se chama ".value". &lt;/p&gt;

&lt;p&gt;Agora, podemos usar essa mudança de estado para gerenciar os valores dos campos em um formulário. Veja um exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setEmail&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;senha&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setSenha&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;onSubmit&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Valor do email: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Valor da senha: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;senha&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;form&lt;/span&gt; &lt;span class="nx"&gt;onSubmit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;onSubmit&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;
                &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
                &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
                &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="nx"&gt;onChange&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setEmail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
                &lt;span class="nx"&gt;required&lt;/span&gt;
            &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;
                &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;password&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
                &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;senha&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
                &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;senha&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="nx"&gt;onChange&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setSenha&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
                &lt;span class="nx"&gt;required&lt;/span&gt;
            &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;submit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Submit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/form&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui temos dois estados: um para o email e outro para a senha. O que a gente faz é atribuir um valor a cada um deles, usando a propriedade "value".&lt;/p&gt;

&lt;p&gt;O campo do email guarda o valor digitado nele. Quando a pessoa digita algo nesse campo, um evento chamado "onchange" é acionado e atualiza o valor do email usando uma função chamada "setEmail", que atualiza o estado do email.&lt;/p&gt;

&lt;p&gt;A mesma coisa acontece com o campo da senha. Quando a pessoa digita algo nele, o evento "onchange" atualiza o valor da senha usando a função "setSenha".&lt;/p&gt;

&lt;p&gt;Resumindo: os valores digitados nos campos de email e senha são controlados pelo estado do componente. Esse estado se torna a fonte única e verdadeira para os campos, então o componente é chamado de "componente controlado".&lt;/p&gt;

&lt;p&gt;O problema de usar um componente controlado é que, conforme adicionamos mais campos ao formulário, o número de estados também aumenta. Isso pode causar muitas renderizações e tornar o componente difícil de controlar.&lt;/p&gt;

&lt;h3&gt;
  
  
  O que são Uncontrolled Components?
&lt;/h3&gt;

&lt;p&gt;Uncontrolled components são aqueles em que os dados do formulário são tratados diretamente pela DOM. O nome "Uncontrolled" vem do fato de que esses componentes não são controlados pelo estado do React.&lt;/p&gt;

&lt;p&gt;Os valores dos campos do formulário são normalmente controlados e armazenados na própria DOM. Para obter os valores dos campos, precisamos acessar a instância desses elementos no DOM.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;onSubmit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Valor do email: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Valor da senha: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;senha&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;form&lt;/span&gt; &lt;span class="nx"&gt;onSubmit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;onSubmit&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;required&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;password&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;senha&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;senha&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;required&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;submit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Submit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/form&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No código acima, demos aos campos de email e senha um ID com valores "email" e "senha", respectivamente. Usamos esses IDs para obter os valores dos campos quando o formulário é enviado.&lt;/p&gt;

&lt;p&gt;O componente acima é chamado de "Uncontrolled Component", porque o React não controla o valor dos campos de entrada do formulário.&lt;/p&gt;

&lt;p&gt;Nesse exemplo, usamos as APIs da DOM diretamente. Agora, vamos dar uma repaginada no código para usar elementos do React.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;emailRef&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useRef&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;senhaRef&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useRef&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;


  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;onSubmit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Valor do email: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;emailRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Valor da senha: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;senhaRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;form&lt;/span&gt; &lt;span class="nx"&gt;onSubmit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;onSubmit&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;emailRef&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;required&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;password&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;senha&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;senhaRef&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;required&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;submit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Submit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/form&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Criamos duas referências no React, uma para o nome e outra para o email. Depois, as conectamos às entradas de email e senha usando o atributo 'ref'. Isso faz com que as referências guardem os elementos HTML correspondentes. A partir daí, podemos usar a propriedade '.current' para acessar os valores inseridos nos campos de entrada.&lt;/p&gt;

&lt;h3&gt;
  
  
  Controlled components vs. Uncontrolled components: Principais diferenças
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Quando usamos componentes controlados, é mais fácil prever o comportamento do nosso formulário, porque o componente está no controle do estado dos elementos do formulário. &lt;/li&gt;
&lt;li&gt;Já nos componentes não controlados, as coisas podem ficar imprevisíveis, porque os elementos do formulário podem perder a referência ou serem afetados por outras fontes durante o ciclo de vida do componente. &lt;/li&gt;
&lt;li&gt;Usando componentes controlados, podemos fazer validações de formulários de maneira mais eficaz. Isso porque os valores dos elementos do formulário são armazenados em nosso estado local e, portanto, são mais seguros. É aqui que realizamos nossas validações.&lt;/li&gt;
&lt;li&gt;Com componentes controlados, temos muito controle sobre os valores dos elementos do formulário. Podemos ditar o que é permitido e o que não é, e como os valores devem ser tratados.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Neste tutorial, ensinamos como lidar com elementos de formulário no React e como estruturar os dados. Falamos sobre duas maneiras diferentes de lidar com dados de formulário em componentes de React: controlados e não controlados. E, por fim, exploramos os dois tipos de componentes em detalhes e demos exemplos práticos para demonstrar como eles funcionam.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>frontend</category>
      <category>react</category>
    </item>
  </channel>
</rss>
