# Introdução
INFO
Novo no Vue.js? Veja nosso Guia Essencial para começar.
Este guia é sobretudo para usuários com experiência prévia em Vue 2 que desejam aprender sobre os novos recursos e mudanças do Vue 3. Este não é um artigo que você precise ler do começo ao fim antes de experimentar o Vue 3. Embora pareça que muita coisa mudou, muito do que você conhece e ama no Vue ainda é o mesmo; mas queríamos ser tão minuciosos quanto possível fornecendo explicações detalhadas e exemplos para cada alteração documentada.
# Visão Geral
Comece aprendendo Vue 3 com Vue Mastery (opens new window).
# Início Rápido
Se você quiser testar rapidamente o Vue 3 em um novo projeto:
Via CDN:
<script src="https://unpkg.com/vue@next"></script>Pelo navegador, via playground em Codepen (opens new window)
Pelo navegador, via Sandbox em CodeSandbox (opens new window)
Pré-estruturado, via Vite (opens new window):
npm init vite hello-vue3 -- --template vue # OU yarn create vite hello-vue3 --template vue1Pré-estruturado, via vue-cli (opens new window):
npm install -g @vue/cli # OU yarn global add @vue/cli vue create hello-vue3 # selecione a predefinição vue 31
2
3
# Compilação de Migração
Se você tem um projeto ou biblioteca do Vue 2 existente que pretende atualizar para o Vue 3, fornecemos uma versão do Vue 3 que oferece APIs compatíveis com o Vue 2. Verifique a página Compilação de Migração para obter mais detalhes.
# Principais Recursos Novos
Alguns dos recursos novos para ficar de olho no Vue 3 incluem:
- API de Composição
- Teleporte
- Fragmentos
- Opções para emitir eventos de componentes
- API
createRendererde@vue/runtime-core(opens new window) para criar renderizações custumizadas - Açúcar sintático para SFC que utilizem API de Composição (
<script setup>) - Variáveis CSS baseadas em estado de SFC (
v-bindno<style>) <style scoped>de SFC agora pode incluir regras globais ou regras que visam apenas conteúdo de slot (opens new window)- Suspense experimental
# Incompatibilidades
A seguir, uma lista de mudanças incompatíveis com v2.x:
# API Global
- API Global do Vue agora utiliza uma instância da aplicação
- API Global e internas foram reestruturadas para serem tree-shakable
# Diretivas de Template
- O uso de
v-modelem componentes foi retrabalhado, substituindo ov-bind.sync - O atributo
keyem<template v-for>e nós que não sejamv-forfoi alterado - A precedência de
v-ifev-forquando usados no mesmo elemento foi modificada v-bind="object"agora é sensível à ordem de disposição- modificador
v-on:event.nativefoi removido refemv-fornão resulta mais em um array de refs
# Componentes
- Componentes funcionais só podem ser criados usando uma função simples
- O atributo
functionalno<template>de Componentes Single File (CSF) e a opção de componentefunctionalestão obsoletas - Componentes assíncronos necessitam de um método
defineAsyncComponentpara serem criados - Os eventos de componente agora devem ser declarados com a opção
emits
# Funções de Renderização
- A API da função de renderização foi modificada
- A propriedade
$scopedSlotsfoi removida e todos os seus slots passam a ser obtidos como funções através de$slots $listenersfoi removida/mesclada em$attrs$attrsagora inclui os atributosclassestyle
# Elementos Personalizados
- A lista de permissões para elementos personalizados agora é realizada durante a compilação do template
- O atributo especial
isestá restrito apenas à tag<component>
# Outras Mudanças Menores
- A opção de ciclo de vida
destroyedfoi renomeada paraunmounted - A opção de ciclo de vida
beforeDestroyfoi renomeada parabeforeUnmount - A função fabricadora de props
defaultnão acessa mais o contextothis - A API de diretivas customizadas foi modificada para se alinhar ao ciclo de vida do componente e
binding.expressionfoi removido - A opção
datadeverá sempre ser declarada como uma função - A opção
datados mixins agora é mesclada superficialmente - Estratégia de coerção de atributos foi alterada
- Algumas classes de transição foram renomeadas
- O
callbackde umarrayque está sendo observado só será acionado quando este for substituído. Caso você precise dispará-lo em mutação, a opçãodeepdeve ser especificada. - As tags
<template>sem diretivas especiais (v-if/else-if/else,v-for, ouv-slot) agora são tratadas como elementos simples resultando em um elemento<template>nativo ao invés de renderizar seu conteúdo interno. - O aplicativo montado não substitui o elemento no qual está montado
- Prefixo
hook:de eventos de ciclo de vida alterado paravnode-
# APIs Removidas
- Suporte a
keyCodecomo modificadoresv-on - Métodos de instância $on, $off e $once
- Filtros
- Atributos inline em templates
- Propriedade de instância
$children - Opção
propsData - Método de instância
$destroy. Os usuários não devem mais acessar manualmente o ciclo de vida de componentes Vue individuais. - Funções globais
setedelete, e os métodos de instância$sete$delete. Eles não são mais necessários com a detecção de alterações baseada em proxy.
# Bibliotecas Suportadas
Todas as nossas bibliotecas e ferramentas oficiais agora oferecem suporte ao Vue 3, mas, algumas delas ainda estão em status beta ou de candidata a lançamento. Você encontrará detalhes para as bibliotecas individuais abaixo. A maioria atualmente é distribuída usando a tag next no npm. Pretendemos mudar para latest assim que todas as bibliotecas oficiais tiverem versões estáveis e compatíveis.
# Vue CLI
A partir da v4.5.0, vue-cli agora oferece a opção integrada para escolher o Vue 3 ao criar um novo projeto. Você pode atualizar o vue-cli e executar o vue create para criar um projeto Vue 3 hoje.
# Vue Router
Vue Router 4.0 provê suporte ao Vue 3 e possui uma série de modificações incompatíveis próprias. Leia o guia de migração (opens new window) para verificar todos os detalhes.
# Vuex
Vuex 4.0 provê suporte ao Vue 3 com basicamente a mesma API que o 3.x. A única modificação incompatível é em como o plugin é instalado (opens new window).
# Extensão para Desenvolvedores
Estamos trabalhando em uma nova versão do Devtools com uma nova interface e refatoração interna para oferecer suporte a várias versões do Vue. A nova versão está atualmente em beta e suporta apenas Vue 3 (por enquanto). A integração do Vuex e do Router também está em andamento.
Para navegador Chrome: Instale da Chrome web store (opens new window)
- Nota: o canal beta pode entrar em conflito com a versão estável do devtools, então pode ser necessário desabilitar temporariamente a versão estável para que a versão beta funcione corretamente.
Para navegador Firefox: Baixe a extensão assinada (opens new window) (Arquivo
.xpiem Assets)
# Suporte de IDE
É recomendado o uso do VSCode (opens new window) com a extensão oficial Volar (opens new window), qual provê suporte à IDE para Vue 3.
# Outros Projetos
| Projeto | NPM | Repositório |
|---|---|---|
| @vue/babel-plugin-jsx | [GitHub (opens new window)] | |
| eslint-plugin-vue | [GitHub (opens new window)] | |
| @vue/test-utils | [GitHub (opens new window)] | |
| vue-class-component | [GitHub (opens new window)] | |
| vue-loader | [GitHub (opens new window)] | |
| rollup-plugin-vue | [GitHub (opens new window)] |
INFO
Para obter informações adicionais sobre a compatibilidade do Vue 3 com bibliotecas e plug-ins, certifique-se de verificar esta issue no awesome-vue (opens new window).