Ir para o conteúdo

Vue.js

Origem: Wikipédia, a enciclopédia livre.
Vue.js
DesenvolvedorEvan You
Lançamento inicialfevereiro de 2014; há 12 anos (2014-02)
Lançamento estável
3.5.40[1]Edit this on Wikidata / 16 julho 2026
Repositóriovuejs/core no GitHub
Escrito emTypeScript
PlataformaWeb
TipoFramework para aplicações web
LicençaMIT
Websitevuejs.org

Vue.js (informalmente chamado de Vue; pronunciado [vj]) é um framework JavaScript de código-aberto, focado no desenvolvimento de interfaces de usuário e aplicativos de página única.[8]

Visão geral

[editar | editar código]

O Vue.js conta com uma arquitetura que pode ser adotada de forma incremental, e que foca na renderização declarativa e na composição de componentes. Funcionalidades avançadas necessárias para aplicações complexas (como encaminhamento, gestão de estados e automação de compilação) são oferecidas por meio de bibliotecas e pacotes de suporte mantidos oficialmente,[9] sendo o Nuxt.js como uma das soluções mais populares.

História

[editar | editar código]

O Vue foi criado pelo desenvolvedor independente chinês Evan You, após trabalhar para o Google usando o AngularJS em vários projetos. Posteriormente, ele resumiu o pensamento por trás do processo de criação do Vue: "Pensei, e se eu pudesse retirar somente a parte que realmente gostava do Angular e criar algo muito leve?".[10] O primeiro commit ao código-fonte do projeto data de julho de 2013, e o framework foi lançado oficialmente em fevereiro do ano seguinte, em 2014.

VersãoData de lançamentoTítulo
3.5 1 de setembro de 2024; há 2 anos Tengen Toppa Gurren Lagann[11]
3.4 28 de dezembro de 2023; há 2 anos Slam Dunk[12]
3.3 11 de maio de 2023; há 3 anos Rurouni Kenshin[13]
3.2 5 de agosto de 2021; há 5 anos Quintessential Quintuplets[14]
3.1 7 de junho de 2021; há 5 anos Pluto[15]
3.0 18 de setembro de 2020; há 5 anos One Piece[16]
2.7 1 de julho de 2022; há 4 anos Naruto[17]
2.6 4 de fevereiro de 2019; há 7 anos Macross[18]
2.5 13 de outubro de 2017; há 8 anos Level E[19]
2.4 13 de julho de 2017; há 9 anos Kill la Kill[20]
2.3 27 de abril de 2017; há 9 anos JoJo's Bizarre Adventure[21]
2.2 26 de fevereiro de 2017; há 9 anos Initial D[22]
2.1 22 de novembro de 2016; há 9 anos Hunter × Hunter[23]
2.0 30 de setembro de 2016; há 9 anos Ghost in the Shell[24]
1.0 27 de outubro de 2015; há 10 anos Evangelion[25]
0.12 12 de junho de 2015; há 11 anos Dragon Ball[26]
0.11 7 de novembro de 2014; há 11 anos Cowboy Bebop[27]
0.10 23 de março de 2014; há 12 anos Blade Runner[28]
0.9 25 de fevereiro de 2014; há 12 anos Animatrix[29]
0.8 27 de janeiro de 2014; há 12 anos N/A[30]
0.7 24 de dezembro de 2013; há 12 anos N/A[31]
0.6 8 de dezembro de 2013; há 12 anos VueJS[32]

Funcionalidades

[editar | editar código]

Componentes

[editar | editar código]

Os componentes Vue extendem elementos HTML básicos para encapsular código reutilizável. A um alto nível, os componentes são elementos personalizados aos quais o compilador do Vue associa determinados comportamentos. No Vue, um componente é essencialmente uma instância do Vue com opções predefinidas.[33] O trecho de código abaixo contém um exemplo de um componente Vue:

<script setup>
import { computed, ref } from 'vue'

const { start = 5 } = defineProps({ start: Number })
const count = ref(start)
const disabled = computed(() => count.value === 0)

function decrement() {
  if (count.value > 0) {
    count.value--
  }
}
</script>

<template>
  <div class="host">
    <data class="label" :value="count">
      <template v-if="count === 0">Fim.</template>
      <template v-else-if="count === 1">Encerra no próximo clique!</template>
      <template v-else>Encerra em {{ count }} cliques.</template>
    </data>
    <button :disabled @click="decrement">Contar</button>
  </div>
</template>

<style scoped>
.host {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  height: 100vh;
}

.label {
  font: 1.125rem Noto, sans-serif;
}
</style>

E o uso:

<script setup>
  import Counter from './Counter.vue'
</script>

<template>
  <Counter :start="5" />
</template>

O Vue usa uma sintaxe de modelo baseada em HTML que permite vincular o DOM renderizado aos dados contidos na instância subjacente do Vue. Todos os modelos do Vue são HTML válido, e podem ser interpretados por navegadores compatíveis e analisadores HTML. Compilando os modelos, o Vue transforma-os em funções de renderização do DOM virtual. O Modelo de Objeto de Documento (ou "DOM") virtual permite ao Vue renderizar componentes internamente antes de atualizar o navegador. Combinado com o sistema de reatividade, consegue calcular o número mínimo de componentes a serem re-renderizados, e manipular minimamente o DOM quando o estado do aplicativo é alterado.

Usuários do Vue podem usar a sintaxe de modelo ou optar por escrever diretamente funções de renderização usando JSX.[34] As funções de renderização permitem que o aplicativo seja construído a partir de componentes de software.[35]

Reatividade

[editar | editar código]

O sistema de reatividade do Vue utiliza objetos JavaScript simples e re-renderização otimizada. Cada componente controla suas próprias dependências reativas durante sua renderização, com o objetivo de que o sistema saiba exatamente quando e quais componentes renderizar novamente.[36]

Transições

[editar | editar código]

O Vue permite diversas maneiras de aplicar efeitos de transição quando itens são inseridos, atualizados ou removidos do DOM. Isso inclui ferramentas para:

  • Aplicar automaticamente classes para transições e animações CSS
  • Integrar bibliotecas de animação CSS de terceiros, como a Animate.css
  • Utilizar JavaScript para manipular diretamente o DOM durante ganchos de transição
  • Integrar bibliotecas de animação JavaScript de terceiros, como Velocity.js

Quando um elemento envolto em um componente de transição é inserido ou removido, o que acontece é:

  1. O Vue detecta automaticamente se o elemento-alvo tem transições ou animações CSS aplicadas; caso em que as classes de transição CSS serão adicionadas ou removidas nos momentos apropriados.
  2. Se o componente de transição fornecer ganchos JavaScript, esses ganchos serão chamados nos momentos apropriados.
  3. Se nenhuma transição/animação CSS for detectada e nenhum gancho JavaScript for fornecido, as operações do DOM para inserção e/ou remoção serão executadas imediatamente no próximo frame.[37][38]

Roteamento

[editar | editar código]

Uma desvantagem tradicional dos aplicativos de página única (SPAs) é a incapacidade de compartilhar links para a "sub-página" exata em uma página da web específica. Como os SPAs atendem a seus usuários apenas uma resposta baseada em URL do servidor (normalmente retornando index.html ou index.vue), marcar determinadas telas ou compartilhar links para seções específicas é normalmente difícil, se não impossível. Para resolver esse problema, muitos roteadores do lado do cliente delimitam suas URLs dinâmicas com um hashbang (#!), por exemplo, page.com/#! /. Com o HTML5, no entanto, a maior parte dos navegadores modernos oferece suporte ao encaminhamento sem hashbangs.

O Vue oferece uma interface para alterar o que é exibido na página com base no caminho atual da URL—independentemente de como ela foi alterada (seja por link enviado por email, atualização da página ou links na própria página). Além disso, o uso de encaminhamento front-end permite a transição intencional do caminho do navegador quando certos eventos (por exemplo, cliques) ocorrem em botões ou links. O próprio Vue não vem com roteamento de hash front-end. Mas o pacote de código-aberto "vue-router" fornece uma API para atualizar a URL do aplicativo, suporta o botão voltar (histórico de navegação) e e-mail de redefinição de senha ou verificação de email com parâmetros de URL de autenticação. Suporta ainda o mapeamento de rotas aninhadas para componentes aninhados e oferece controle de transição preciso. Com o Vue, desenvolvedores já estão compondo aplicativos com pequenos blocos construindo componentes maiores. Com o vue-router adicionado à mistura, os componentes devem simplesmente ser mapeados para as rotas às quais pertencem, e as rotas parent/raiz devem indicar onde os "filhos" devem renderizar.[39] Exemplo:

import { createApp } from 'vue'
import { createRouter, createWebHistory } from 'vue-router'

import App from './App.vue'

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: [
    {
      path: '/',
      name: 'home',
      component: () => import('@/views/HomeView.vue'),
    },
  ],
})

const app = createApp(App)
app.use(router)
app.mount('#app')

E o arquivo App.vue:

<script setup>
import { RouterView } from 'vue-router'
</script>

<template>
  <RouterView />
</template>

Ecossistema

[editar | editar código]

A biblioteca principal vem com ferramentas e bibliotecas desenvolvidas pela equipe principal e por colaboradores.

Ferramentas Oficiais

[editar | editar código]
  • Devtools - extensão devtools do navegador para depuração de aplicativos Vue.js
  • Vue CLI - Ferramentas padrão para desenvolvimento rápido com Vue.js
  • Vue Loader - um loader webpack que permite a escrita de componentes Vue em um formato chamado SFC (Single-File Components)

Bibliotecas oficiais

[editar | editar código]
  • Vue Router - O router oficial para o Vue.js
  • Vuex - Gerenciamento centralizado de estado inspirado em fluxo para Vue.js
  • Vue Server Renderer - Renderização server-side para Vue.js
  • Pinia - Gerenciamento de estado inspirado no Vuex, oficial do Vue 3.

Ver também

[editar | editar código]

Referências

  1. «Release v3.5.40 · vuejs/core». 16 julho 2026. Consultado em 16 julho 2026
  2. Macrae, Callum (2018). Vue.js: Up and Running: Building Accessible and Performant Web Apps (em inglês). [S.l.]: O'Reilly Media. ISBN 9781491997215. Cópia arquivada em 29 de janeiro de 2026
  3. Nelson, Brett (2018). Getting to Know Vue.js: Learn to Build Single Page Applications in Vue from Scratch (em inglês). [S.l.]: Apress. ISBN 9781484237816. Cópia arquivada em 12 de setembro de 2025
  4. Yerburgh, Edd (2019). Testing Vue.js Applications (em inglês). [S.l.]: Manning Publications. ISBN 9781617295249. Cópia arquivada em 17 de setembro de 2025
  5. Freeman, Adam (2018). Pro Vue.js 2 (em inglês). [S.l.]: Apress. ISBN 9781484238059. Cópia arquivada em 16 de setembro de 2025
  6. Franklin, Jack; Wanyoike, Michael; Bouchefra, Ahmed; Silas, Kingsley; Campbell, Chad A.; Jacques, Nilson; Omole, Olayinka; Mulders, Michiel (2019). Working with Vue.js (em inglês). [S.l.]: SitePoint. ISBN 9781492071440. Cópia arquivada em 6 de fevereiro de 2023
  7. «Introduction — Vue.js» (em inglês). Consultado em 11 de março de 2017. Cópia arquivada em 18 de janeiro de 2022
  8. [2][3][4][5][6][7]
  9. «Evan is creating Vue.js | Patreon». Patreon (em inglês). Cópia arquivada em 21 de junho de 2026
  10. «Between the Wires | Evan You». Between the Wires [ligação inativa]
  11. «Announcing Vue 3.5». 1 de setembro de 2024. Consultado em 25 de outubro 2024. Cópia arquivada em 3 de setembro de 2024
  12. «Announcing Vue 3.4». Vue.js. 28 de dezembro de 2023. Consultado em 29 de março de 2024. Cópia arquivada em 24 de março de 2024
  13. «v3.3.0 Rurouni Kenshin». Vue.js (em inglês). 11 de maio de 2023. Consultado em 12 de maio de 2023. Cópia arquivada em 13 de dezembro de 2023 via GitHub
  14. «v3.2.0 Quintessential Quintuplets». Vue.js (em inglês). 5 de agosto de 2021. Consultado em 10 de agosto de 2021. Cópia arquivada em 10 de agosto de 2021 via GitHub
  15. «v3.1.0 Pluto». Vue.js (em inglês). 7 de junho de 2021. Consultado em 18 de julho de 2021. Cópia arquivada em 18 de julho de 2021 via GitHub
  16. «v3.0.0 One Piece». Vue.js (em inglês). 18 de setembro de 2020. Consultado em 23 de setembro de 2020. Cópia arquivada em 19 de setembro de 2020 via GitHub
  17. «v2.7.0 Naruto». Vue.js (em inglês). 1 de julho de 2022. Consultado em 1 de julho de 2022. Cópia arquivada em 1 de julho de 2022 via GitHub
  18. «v2.6.0 Macross». Vue.js (em inglês). 4 de fevereiro de 2019. Consultado em 23 de setembro de 2020. Cópia arquivada em 11 de novembro de 2020 via GitHub
  19. «v2.5.0 Level E». Vue.js (em inglês). 13 de outubro de 2017. Consultado em 23 de setembro de 2020. Cópia arquivada em 18 de setembro de 2020 via GitHub
  20. «v2.4.0 Kill la Kill». Vue.js (em inglês). 13 de julho de 2017. Consultado em 23 de setembro de 2020. Cópia arquivada em 9 de novembro de 2020 via GitHub
  21. «v2.3.0 JoJo's Bizarre Adventure». Vue.js (em inglês). 27 de abril de 2017. Consultado em 23 de setembro de 2020. Cópia arquivada em 11 de novembro de 2020 via GitHub
  22. «v2.2.0 Initial D». Vue.js (em inglês). 26 de fevereiro de 2017. Consultado em 23 de setembro de 2020. Cópia arquivada em 13 de abril de 2021 via GitHub
  23. «v2.1.0 Hunter X Hunter». Vue.js (em inglês). 22 de novembro de 2016. Consultado em 23 de setembro de 2020. Cópia arquivada em 8 de novembro de 2020 via GitHub
  24. «v2.0.0 Ghost in the Shell». Vue.js (em inglês). 30 de setembro de 2016. Consultado em 23 de setembro de 2020. Cópia arquivada em 27 de outubro de 2020 via GitHub
  25. «1.0.0 Evangelion». Vue.js (em inglês). 27 de outubro de 2015. Consultado em 23 de setembro de 2020. Cópia arquivada em 13 de abril de 2021 via GitHub
  26. «0.12.0: Dragon Ball». Vue.js (em inglês). 12 de junho de 2015. Consultado em 23 de setembro de 2020. Cópia arquivada em 13 de abril de 2021 via GitHub
  27. «v0.11.0: Cowboy Bebop». Vue.js (em inglês). 7 de novembro de 2014. Consultado em 23 de setembro de 2020. Cópia arquivada em 13 de abril de 2021 via GitHub
  28. «v0.10.0: Blade Runner». Vue.js (em inglês). 23 de março de 2014. Consultado em 23 de setembro de 2020. Cópia arquivada em 13 de abril de 2021 via GitHub
  29. «v0.9.0: Animatrix». Vue.js (em inglês). 25 de fevereiro de 2014. Consultado em 23 de setembro de 2020. Cópia arquivada em 13 de abril de 2021 via GitHub
  30. «v0.8.0». Vue.js (em inglês). 27 de janeiro de 2014. Consultado em 23 de setembro de 2020. Cópia arquivada em 13 de abril de 2021 via GitHub
  31. «v0.7.0». Vue.js (em inglês). 24 de dezembro de 2013. Consultado em 23 de setembro de 2020. Cópia arquivada em 13 de abril de 2021 via GitHub
  32. «0.6.0: VueJS». Vue.js (em inglês). 8 de dezembro de 2013. Consultado em 23 de setembro de 2020. Cópia arquivada em 13 de abril de 2021 via GitHub
  33. «Components — Vue.js» (em inglês). Cópia arquivada em 4 de fevereiro de 2022
  34. «Template Syntax — Vue.js» (em inglês). Cópia arquivada em 15 de janeiro de 2022
  35. «Vue 2.0 is Here!». The Vue Point. Cópia arquivada em 2 de março de 2026
  36. «Reactivity in Depth — Vue.js» (em inglês). Cópia arquivada em 17 de dezembro de 2021
  37. «Transition Effects — Vue.js» (em inglês). Cópia arquivada em 27 de janeiro de 2022
  38. «Transitioning State — Vue.js» (em inglês). Cópia arquivada em 10 de outubro de 2021
  39. «Getting Started | Vue Router» (em inglês). Consultado em 26 de fevereiro de 2026. Cópia arquivada em 3 de julho de 2026

Ligações externas

[editar | editar código]