<?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: Italo Barros</title>
    <description>The latest articles on DEV Community by Italo Barros (@italobarrosme).</description>
    <link>https://dev.to/italobarrosme</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%2F221585%2F543a1463-2061-4864-867b-124abacfa27d.png</url>
      <title>DEV Community: Italo Barros</title>
      <link>https://dev.to/italobarrosme</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/italobarrosme"/>
    <language>en</language>
    <item>
      <title>Usando &lt;`script setup`&gt; no vueJS3</title>
      <dc:creator>Italo Barros</dc:creator>
      <pubDate>Wed, 12 Jan 2022 20:50:15 +0000</pubDate>
      <link>https://dev.to/italobarrosme/usando-no-vuejs3-4co1</link>
      <guid>https://dev.to/italobarrosme/usando-no-vuejs3-4co1</guid>
      <description>&lt;p&gt;No dia a dia do desenvolvimento buscamos sempre escrever menos e entregar mais, no vue3 utilizo do Composition API para buscar alcançar esse objetivo e a um tempo mudei minha abordagem de escrever e definir componentes Vue utilizando da feature &lt;code&gt;&amp;lt;script setup&amp;gt;&lt;/code&gt;.&lt;/p&gt;

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

&lt;p&gt;O VueJS 3 introduziu o &lt;code&gt;&amp;lt;script setup&amp;gt;&lt;/code&gt;que é um syntax sugar para reduzir a verbosidade no &lt;strong&gt;Composition API&lt;/strong&gt; dentro de componentes de arquivos únicos (SFCs) além de reduzir a verbosidade outros benefícios ele nos traz.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Capacidade de declarar props e eventos emitidos usando TypeScript puro&lt;/li&gt;
&lt;li&gt;Melhor desempenho de tempo de execução.&lt;/li&gt;
&lt;li&gt;Código mais enxutos com menos clichês&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Exemplo de código &lt;strong&gt;SEM&lt;/strong&gt; o &lt;code&gt;&amp;lt;script setup&amp;gt;&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;Exemplo de código &lt;strong&gt;COM&lt;/strong&gt; o &lt;code&gt;&amp;lt;script setup&amp;gt;&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;Observe como o mesmo código ficou bem mais enxuto!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Ao usar &lt;code&gt;&amp;lt;script setup&amp;gt;&lt;/code&gt;, quaisquer “&lt;em&gt;top-level bindings&lt;/em&gt;” (incluindo variáveis e declarações de função) declaradas dentro do &lt;code&gt;&amp;lt;script setup&amp;gt;&lt;/code&gt; são automaticamente expostas ao template.&lt;/p&gt;

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

&lt;p&gt;Como também &lt;code&gt;“Importações”&lt;/code&gt; podem ser utilizadas diretamente em expressões do template sem precisar expô-la no &lt;code&gt;methods&lt;/code&gt;.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Reatividade
&lt;/h3&gt;

&lt;p&gt;O estado reativo precisa ser criado explicitamente, semelhante ao &lt;code&gt;setup()&lt;/code&gt;&lt;br&gt;
refs são automaticamente desempacotadas quando referenciados no template&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Componentes
&lt;/h3&gt;

&lt;p&gt;Só precisamos importá-los no &lt;code&gt;&amp;lt;script setup&amp;gt;&lt;/code&gt;, podem ser usados diretamente como tags no nosso template, é fortemente recomendado o uso de &lt;code&gt;“PascalCase”&lt;/code&gt; para manter a consistência. Também ajuda a diferenciar dos elementos personalizados nativos.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Componentes dinâmicos
&lt;/h3&gt;

&lt;p&gt;Como os componentes são referenciados como variáveis, você usa o &lt;code&gt;:is&lt;/code&gt; para vinculo dinâmico. Observe que podem ser usadas expressões condicionais.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Components recursivos
&lt;/h3&gt;

&lt;p&gt;Um componente pode se referir implicitamente a si mesmo por meio de seu nome de arquivo em seu template.&lt;br&gt;
Você também pode utilizar o alias da importação.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Diretivas Personalizadas
&lt;/h3&gt;

&lt;p&gt;As diretivas personalizadas registradas globalmente funcionam conforme importadas e as locais podem ser usadas diretamente no template.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Mas há uma restrição a ser observada: você deve nomear as diretivas personalizadas locais de acordo com o seguinte esquema: &lt;code&gt;vNonmeDaDirective&lt;/code&gt; para que elas possam ser usadas diretamente no modelo.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;h3&gt;
  
  
  Props e emits
&lt;/h3&gt;

&lt;p&gt;Para declaração de &lt;code&gt;props&lt;/code&gt; e &lt;code&gt;emits&lt;/code&gt;, você de usar o &lt;code&gt;defineProps&lt;/code&gt; e &lt;code&gt;defineEmits&lt;/code&gt; respectivamente.&lt;br&gt;
O &lt;code&gt;defineProps&lt;/code&gt; e &lt;code&gt;defineEmits&lt;/code&gt; sao macros do compilador utilizáveis apenas no &lt;br&gt;
&lt;code&gt;&amp;lt;script setup&amp;gt;&lt;/code&gt; precisam ser previmente importados.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  defineExpose
&lt;/h3&gt;

&lt;p&gt;Componentes usando &lt;code&gt;&amp;lt;script setup&amp;gt;&lt;/code&gt; são fechados por padrão.&lt;/p&gt;

&lt;p&gt;Para expor explicitamente as propriedades em um &lt;code&gt;&amp;lt;script setup&amp;gt;&lt;/code&gt; use a &lt;code&gt;defineExpose&lt;/code&gt; que também é um macro.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Ciclo de vida do vue com &lt;code&gt;&amp;lt;script setup&amp;gt;&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Podemos registrar os &lt;code&gt;hook&lt;/code&gt; de ciclo de vida do componente usando métodos &lt;code&gt;onX&lt;/code&gt; , que podemos importar da biblioteca.&lt;/p&gt;

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

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

&lt;h3&gt;
  
  
  Propriedades Computadas
&lt;/h3&gt;

&lt;p&gt;Podemos declarar uma propriedade computada que é atualizada automaticamente sempre, dependendo da propriedade ou dos dados alterados.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Propriedades watches
&lt;/h3&gt;

&lt;p&gt;Podemos reagir a alterações de dados através da opção de watches fornecida pelo Vue. Isso é mais útil quando queremos realizar operações assíncronas ou caras em resposta a alterações.&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;referências&lt;/em&gt;&lt;br&gt;
&lt;a href="https://v3.vuejs.org/api/sfc-script-setup.html#basic-syntax" rel="noopener noreferrer"&gt;https://v3.vuejs.org/api/sfc-script-setup.html#basic-syntax&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Considerações finais
&lt;/h3&gt;

&lt;p&gt;Agora, com o &lt;code&gt;&amp;lt;script setup&amp;gt;&lt;/code&gt; , sinto que meu código esteja mais simplificado, fácil de ler. Essa forma ajuda muito no code review ganhamos tempo. A produtividade vem aumentando de forma consistente, focando no &lt;code&gt;clean code&lt;/code&gt;. E com o par com ferramentas como &lt;a href="https://vueuse.org/" rel="noopener noreferrer"&gt;VueUse&lt;/a&gt; ou seus próprios /composables essa produtividade só aumenta.&lt;/p&gt;

&lt;p&gt;Espero ter ajudado com um pouco de conhecimento a você caro leitor!&lt;br&gt;
y-&lt;/p&gt;

</description>
      <category>vue</category>
      <category>javascript</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
