Este tutorial cobre o básico do Vue.js 3, desde a criação de um projeto até a navegação entre páginas, reatividade, hooks e mais.
- Introdução ao Vue.js 3
- O que é Reatividade?
- Como Criar um Projeto Vue.js 3
- Navegação Entre Páginas com Vue Router
- Reatividade no Vue.js
- Comunicação entre Componentes
- Usando v-for, v-if e v-else
- Hooks no Vue.js 3
- Instalar Pacotes com NPM
- Remover a Reatividade
- Passar Props
- Conclusão
O Vue.js é um framework JavaScript progressivo usado para construir interfaces de usuário dinâmicas e interativas. É amplamente utilizado para o desenvolvimento de aplicativos da web, pois é simples de adotar e integrar com outras bibliotecas ou projetos existentes. O Vue.js se destaca por sua reatividade, que permite a sincronização automática entre o modelo de dados e a interface do usuário. Isso significa que qualquer mudança no estado dos dados refletirá automaticamente na interface.
O Vue.js 3 traz melhorias significativas em termos de desempenho, tamanho de bundle e uma nova API chamada Composition API, que torna a organização do código mais flexível e escalável, especialmente em projetos maiores.
Reatividade no Vue.js é o conceito central que permite que as alterações nos dados de um aplicativo sejam automaticamente refletidas na interface do usuário sem a necessidade de atualizações manuais.
Quando você define uma variável como reativa no Vue.js (usando ref ou reactive), o framework "escuta" essas mudanças e atualiza a interface toda vez que o valor dessa variável é modificado. Por exemplo, se você tem um contador no seu app e o valor desse contador muda, o Vue.js vai se certificar de que o valor exibido na tela seja atualizado automaticamente, sem que você precise interagir diretamente com o DOM.
No Vue.js, a reatividade é construída sobre a Programação Reativa, onde as dependências dos dados são rastreadas para que, sempre que os dados mudem, todas as partes dependentes do código também sejam atualizadas de forma eficiente.
Exemplo de reatividade básica:
import { ref } from 'vue';
export default {
setup() {
const contador = ref(0);
function incrementar() {
contador.value++;
}
return { contador, incrementar };
}
};Neste caso, o Vue.js garante que a interface será atualizada toda vez que contador.value mudar.
npm init vue@latestSiga as instruções para configurar seu projeto. Após a configuração, rode o projeto:
cd nome-do-projeto
npm install
npm run devAcesse o projeto em http://localhost:3000.
Instale o Vue Router:
npm install vue-router@4Crie o arquivo de rotas src/router/index.js:
import { createRouter, createWebHistory } from 'vue-router';
import Home from '../views/Home.vue';
import About from '../views/About.vue';
const routes = [
{ path: '/', component: Home },
{ path: '/about', component: About }
];
const router = createRouter({
history: createWebHistory(),
routes
});
export default router;Configure o router em main.js:
import { createApp } from 'vue';
import App from './App.vue';
import router from './router';
createApp(App).use(router).mount('#app');Use o <router-link> para navegar:
<router-link to="/">Home</router-link>
<router-link to="/about">About</router-link>
<router-view></router-view>Crie variáveis reativas com ref:
import { ref } from 'vue';
export default {
setup() {
const contador = ref(0);
function incrementar() {
contador.value++;
}
return { contador, incrementar };
}
};Utilize no template:
<button @click="incrementar">Contador: {{ contador }}</button>Pai:
<ChildComponent @eventoDoFilho="funcaoNoPai" />export default {
methods: {
funcaoNoPai() {
console.log('Função chamada pelo componente filho');
}
}
};Filho:
<button @click="$emit('eventoDoFilho')">Chamar Pai</button><ul>
<li v-for="item in items" :key="item.id">{{ item.name }}</li>
</ul><p v-if="mostrar">Este texto será mostrado.</p>
<p v-else>Este texto será mostrado se a condição for falsa.</p>import { onMounted } from 'vue';
export default {
setup() {
onMounted(() => {
console.log('Componente montado!');
});
}
};import { onBeforeMount } from 'vue';
export default {
setup() {
onBeforeMount(() => {
console.log('Antes de montar o componente');
});
}
};import { onUpdated } from 'vue';
export default {
setup() {
onUpdated(() => {
console.log('Componente atualizado!');
});
}
};import { onUnmounted } from 'vue';
export default {
setup() {
onUnmounted(() => {
console.log('Componente desmontado!');
});
}
};import { ref, watch } from 'vue';
export default {
setup() {
const contador = ref(0);
watch(contador, (novoValor, valorAntigo) => {
console.log(`Contador mudou de ${valorAntigo} para ${novoValor}`);
});
return { contador };
}
};import { ref, watchEffect } from 'vue';
export default {
setup() {
const contador = ref(0);
watchEffect(() => {
console.log(`Contador atual: ${contador.value}`);
});
return { contador };
}
};Para instalar pacotes adicionais:
npm install axiosUsando o pacote no componente:
import axios from 'axios';
axios.get('https://api.example.com').then(response => {
console.log(response.data);
});Use o operador de espalhamento para desativar a reatividade:
const valorNormal = { ...valorReativo };Pai:
<Filho :mensagem="mensagemDoPai" />Filho:
<p>{{ mensagem }}</p>export default {
props: ['mensagem']
};Neste tutorial, você aprendeu:
- O que é o Vue.js e reatividade
- Como criar um projeto Vue.js 3
- Navegação entre páginas com Vue Router
- Usar reatividade e comunicação entre componentes
- Trabalhar com
v-for,v-if,v-else - Hooks do ciclo de vida
- Instalar pacotes com NPM
- Passar props e remover reatividade
Próximos passos: explore autenticação, gerenciamento de estado com Vuex, e faça o deploy da sua aplicação Vue.js.