Vue.js
As referências deste artigo necessitam de formatação. (novembro de 2025) |
| Vue.js | |
|---|---|
| Desenvolvedor | Evan You |
| Lançamento inicial | fevereiro de 2014 |
| Lançamento estável | 3.5.40[1] |
| Repositório | vuejs/core no GitHub |
| Escrito em | TypeScript |
| Plataforma | Web |
| Tipo | Framework para aplicações web |
| Licença | MIT |
| Website | vuejs |
Vue.js (informalmente chamado de Vue; pronunciado [vjuː]) é 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ões
[editar | editar código]| Versão | Data de lançamento | Título |
|---|---|---|
| 3.5 | 1 de setembro de 2024 | Tengen Toppa Gurren Lagann[11] |
| 3.4 | 28 de dezembro de 2023 | Slam Dunk[12] |
| 3.3 | 11 de maio de 2023 | Rurouni Kenshin[13] |
| 3.2 | 5 de agosto de 2021 | Quintessential Quintuplets[14] |
| 3.1 | 7 de junho de 2021 | Pluto[15] |
| 3.0 | 18 de setembro de 2020 | One Piece[16] |
| 2.7 | 1 de julho de 2022 | Naruto[17] |
| 2.6 | 4 de fevereiro de 2019 | Macross[18] |
| 2.5 | 13 de outubro de 2017 | Level E[19] |
| 2.4 | 13 de julho de 2017 | Kill la Kill[20] |
| 2.3 | 27 de abril de 2017 | JoJo's Bizarre Adventure[21] |
| 2.2 | 26 de fevereiro de 2017 | Initial D[22] |
| 2.1 | 22 de novembro de 2016 | Hunter × Hunter[23] |
| 2.0 | 30 de setembro de 2016 | Ghost in the Shell[24] |
| 1.0 | 27 de outubro de 2015 | Evangelion[25] |
| 0.12 | 12 de junho de 2015 | Dragon Ball[26] |
| 0.11 | 7 de novembro de 2014 | Cowboy Bebop[27] |
| 0.10 | 23 de março de 2014 | Blade Runner[28] |
| 0.9 | 25 de fevereiro de 2014 | Animatrix[29] |
| 0.8 | 27 de janeiro de 2014 | N/A[30] |
| 0.7 | 24 de dezembro de 2013 | N/A[31] |
| 0.6 | 8 de dezembro de 2013 | 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>
Modelos
[editar | editar código]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 é:
- 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.
- Se o componente de transição fornecer ganchos JavaScript, esses ganchos serão chamados nos momentos apropriados.
- 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
- ↑ «Release v3.5.40 · vuejs/core». 16 julho 2026. Consultado em 16 julho 2026
- ↑ 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
- ↑ 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
- ↑ 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
- ↑ Freeman, Adam (2018). Pro Vue.js 2 (em inglês). [S.l.]: Apress. ISBN 9781484238059. Cópia arquivada em 16 de setembro de 2025
- ↑ 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
- ↑ «Introduction — Vue.js» (em inglês). Consultado em 11 de março de 2017. Cópia arquivada em 18 de janeiro de 2022
- ↑ [2][3][4][5][6][7]
- ↑ «Evan is creating Vue.js | Patreon». Patreon (em inglês). Cópia arquivada em 21 de junho de 2026
- ↑ «Between the Wires | Evan You». Between the Wires [ligação inativa]
- ↑ «Announcing Vue 3.5». 1 de setembro de 2024. Consultado em 25 de outubro 2024. Cópia arquivada em 3 de setembro de 2024
- ↑ «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
- ↑ «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
- ↑ «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
- ↑ «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
- ↑ «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
- ↑ «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
- ↑ «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
- ↑ «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
- ↑ «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
- ↑ «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
- ↑ «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
- ↑ «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
- ↑ «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
- ↑ «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
- ↑ «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
- ↑ «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
- ↑ «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
- ↑ «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
- ↑ «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
- ↑ «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
- ↑ «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
- ↑ «Components — Vue.js» (em inglês). Cópia arquivada em 4 de fevereiro de 2022
- ↑ «Template Syntax — Vue.js» (em inglês). Cópia arquivada em 15 de janeiro de 2022
- ↑ «Vue 2.0 is Here!». The Vue Point. Cópia arquivada em 2 de março de 2026
- ↑ «Reactivity in Depth — Vue.js» (em inglês). Cópia arquivada em 17 de dezembro de 2021
- ↑ «Transition Effects — Vue.js» (em inglês). Cópia arquivada em 27 de janeiro de 2022
- ↑ «Transitioning State — Vue.js» (em inglês). Cópia arquivada em 10 de outubro de 2021
- ↑ «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]- Sítio oficial
- vuejs/core no GitHub
- «Vue SFC Playground» (em inglês). Experimente Vue.js online