Pular para o conteúdo principal

[Medium] Vue Básico e API

1. Can you describe the core principles and advantages of the framework Vue?​

Descreva os princípios centrais e vantagens do framework Vue

Princípios Centrais​

Vue é um framework JavaScript progressivo, cujos princípios centrais incluem os seguintes conceitos importantes:

1. Virtual DOM​

Usa Virtual DOM para melhorar a performance. Atualiza apenas os nós do DOM que mudaram, em vez de re-renderizar toda a árvore DOM. Através do algoritmo diff, compara as diferenças entre o Virtual DOM antigo é o novo, realizando operações reais no DOM apenas nas partes diferentes.

// Conceito ilustrativo do Virtual DOM
const vnode = {
tag: 'div',
props: { class: 'container' },
children: [
{ tag: 'h1', children: 'Hello' },
{ tag: 'p', children: 'World' },
],
};

2. Ligação Bidirecional de Dados (Two-way Data Binding)​

Quando o Model muda, a View atualiza automaticamente, e vice-versa. Desenvolvedores não precisam manipular o DOM manualmente.

<!-- Escrita recomendada Vue 3: <script setup> -->
<template>
<input v-model="message" />
<p>{{ message }}</p>
</template>

<script setup>
import { ref } from 'vue';
const message = ref('Hello Vue');
</script>

3. Baseado em Componentes (Component-based)​

Divide a aplicação inteira em componentes individuais, aumentando a reutilização. Cada componente tem seu próprio estado, estilo e lógica.

4. Lifecycle Hooks​

Possui seu próprio ciclo de vida. Quando os dados mudam, hooks específicos são acionados para executar operações correspondentes.

5. Sistema de Diretivas​

Fornece diretivas comuns como v-if, v-for, v-bind, v-model, permitindo desenvolvimento mais rápido.

6. Sintaxe de Template​

Usa templates para escrever HTML, permitindo renderizar dados diretamente no template através de interpolação.

Vantagens Exclusivas do Vue (comparado ao React)​

1. Curva de Aprendizado Mais Baixa​

A diferença de nível entre membros da equipe não será grande, é o estilo de escrita e unificado oficialmente.

2. Sintaxe de Diretivas Própria​

O sistema de diretivas do Vue oferece formas mais intuitivas de lidar com lógica de UI comum.

3. Ligação Bidirecional de Dados Mais Fácil​

Com v-model, a ligação bidirecional é muito simples, enquanto React requer tratamento manual.

4. Separação de Template e Lógica​

Separar lógica e UI torna a leitura e manutenção mais fáceis.

5. Ecossistema Oficial Completo​

Vue fornece soluções oficiais completas (Vue Router, Vuex/Pinia, Vue CLI).

2. Please explain the usage of v-model, v-bind and v-html​

Explique o uso de v-model, v-bind e v-html

v-model: Ligação Bidirecional de Dados​

Ao alterar dados, o conteúdo renderizado no template muda automaticamente, e vice-versa.

<template>
<div>
<!-- Caixa de texto -->
<input v-model="message" />
<p>Conteúdo digitado: {{ message }}</p>

<!-- Checkbox -->
<input type="checkbox" v-model="checked" />
<p>Selecionado: {{ checked }}</p>

<!-- Lista de selecao -->
<select v-model="selected">
<option value="A">Opcao A</option>
<option value="B">Opcao B</option>
</select>
<p>Opcao selecionada: {{ selected }}</p>
</div>
</template>

<script>
export default {
data() {
return {
message: '',
checked: false,
selected: 'A',
};
},
};
</script>

Modificadores do v-model​

<!-- .lazy: Atualiza após o evento change -->
<input v-model.lazy="msg" />

<!-- .number: Converte automaticamente para número -->
<input v-model.number="age" type="number" />

<!-- .trim: Remove espacos em branco automaticamente -->
<input v-model.trim="msg" />

v-bind: Ligação Dinâmica de Atributos​

Comumente usado para vincular classes, links, imagens, etc.

<template>
<div>
<!-- Vincular class (abreviacao :class) -->
<div :class="{ active: isActive, 'text-danger': hasError }">Class dinamica</div>

<!-- Vincular style -->
<div :style="{ color: textColor, fontSize: fontSize + 'px' }">Estilo dinâmico</div>

<!-- Vincular caminho de imagem -->
<img :src="imageUrl" :alt="imageAlt" />

<!-- Vincular link -->
<a :href="linkUrl">Ir para o link</a>
</div>
</template>

v-html: Renderizar String HTML​

Usado quando o conteúdo retornado contém tags HTML, como exibir Markdown ou imagens com tags <img>.

<template>
<div>
<!-- Interpolação normal: exibe tags HTML como texto -->
<p>{{ rawHtml }}</p>

<!-- v-html: renderiza o HTML -->
<p v-html="rawHtml"></p>
</div>
</template>

Aviso de segurança: Nunca use v-html com conteúdo fornecido pelo usuario para evitar vulnerabilidades XSS!

Resumo Comparativo​

DiretivaUsoAbreviacaoExemplo
v-modelLigação bidirecional de formuláriosNenhuma<input v-model="msg">
v-bindLigação unidirecional de atributos:<img :src="url">
v-htmlRenderizar string HTMLNenhuma<div v-html="html"></div>

3. How to access HTML elements (Template Refs)?​

Como acessar elementos HTML no Vue?

No Vue, não é recomendado usar document.querySelector. Em vez disso, use Template Refs.

Composition API (Vue 3)​

<template>
<div>
<input ref="inputElement" />
<button @click="focusInput">Focus Input</button>
</div>
</template>

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

const inputElement = ref(null);

const focusInput = () => {
inputElement.value?.focus();
};

onMounted(() => {
console.log(inputElement.value);
});
</script>

Observacoes: O nome da variável deve ser identico ao valor do atributo ref no template. Acesse o elemento DOM somente após onMounted.

4. Please explain the difference between v-show and v-if​

Explique a diferença entre v-show e v-if

Semelhanças​

Ambos controlam a exibição e ocultacao de elementos DOM baseado em condições.

Diferenças​

1. Forma de Manipulação do DOM​

  • v-show: Controla através da propriedade CSS display. O elemento permanece no DOM.
  • v-if: Remove ou adiciona o elemento diretamente do DOM.

2. Diferenças de Performance​

  • v-show: Custo inicial maior (elemento sempre e criado), custo de alternância menor (apenas CSS). Adequado para alternância frequente.
  • v-if: Custo inicial menor (não renderiza quando false), custo de alternância maior (destroi/recria). Adequado para condições que raramente mudam.

3. Acionamento de Lifecycle​

  • v-if: Aciona o ciclo de vida completo do componente
  • v-show: Não aciona o ciclo de vida do componente

Tabela Comparativa​

Característicav-ifv-show
Custo inicialBaixo (não renderiza se false)Alto (sempre renderiza)
Custo de alternânciaAlto (destroi/recria)Baixo (apenas CSS)
CenárioCondições que raramente mudamAlternância frequente
LifecycleAcionaNão aciona
Uso combinadov-else-if, v-elseNenhum

Ponto de Memorização​

  • v-if: Não renderiza quando não exibe, adequado para condições que raramente mudam
  • v-show: Renderiza desde o início, pronto para exibir, adequado para alternância frequente

5. What's the difference between computed and watch?​

Qual é a diferença entre computed e watch?

computed (Propriedades Computadas)​

  • Mecanismo de cache: O resultado e armazenado em cache e só e recalculado quando as dependências mudam
  • Rastreamento automático: Rastreia automaticamente os dados reativos usados
  • Calculo síncrono: Deve ser síncrono e ter valor de retorno
  • Adequado para: formatacao, filtragem, soma de dados

watch (Propriedades de Observação)​

  • Rastreamento manual: Necessita especificar explicitamente quais dados observar
  • Operações assíncronas: Adequado para chamadas de API, timers, etc.
  • Sem valor de retorno: Usado principalmente para efeitos colaterais
  • Valores antigo e novo: Pode acessar valores antes e depois da mudança

Tabela Comparativa​

Característicacomputedwatch
Uso principalCalcular novos dados a partir de existentesObservar mudanças e executar efeitos
Valor de retornoObrigatórioNão necessário
CacheSimNão
RastreamentoAutomáticoManual
Operações assíncronasNão suportaSuporta
Valores antigo/novoNão disponívelDisponível

Ponto de Memorização​

"computed calcula dados, watch executa ações"

  • computed: Para calcular novos dados (formatacao, filtragem, soma)
  • watch: Para executar ações (requisições API, salvar dados, exibir notificações)

Reference​