🧩 Exercícios: Criação de Composables Reutilizáveis
Spec Frontend Com Vue • Trilha Progressiva em 4 Níveis
🧭 Navegação Pedagógica
-
📖 Teoria do Capítulo 💻 Exemplos 📊 Slides 🧠 Quiz
🎯 Nível 1: Fundamentos
Problema 08.1 — Composable useToggle para Controle de Estados Booleanos
Contexto: Composable useToggle para Controle de Estados Booleanos no contexto de Criação de Composables Reutilizáveis.
Requisitos de Execução:
- Criar função
useToggle(initialValue)retornando ref reativa e função de alternância.
Resultado Esperado
Composable reutilizável de toggle testado com sucesso.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_08_1_SeuNome - Envie na tarefa:
Atividade Cap 08 - Criação de Composables Reutilizáveis
🔑 Gabarito de Código & Solução Comentada
// composables/useToggle.ts
import { ref } from 'vue';
export function useToggle(valorInicial: boolean = false) {
const ativo = ref(valorInicial);
const toggle = () => { ativo.value = !ativo.value; };
const ativar = () => { ativo.value = true; };
const desativar = () => { ativo.value = false; };
return { ativo, toggle, ativar, desativar };
}
🔍 Nível 2: Prática
Problema 08.2 — Composable useFetch com Cancelamento e Estados de Loading/Error
Contexto: Composable useFetch com Cancelamento e Estados de Loading/Error no contexto de Criação de Composables Reutilizáveis.
Requisitos de Execução:
- Implementar
useFetch(url)retornando{ data, loading, error, refetch }com tipagem genérica.
Resultado Esperado
Busca assíncrona encapsulada em composable reativo.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_08_2_SeuNome - Envie na tarefa:
Atividade Cap 08 - Criação de Composables Reutilizáveis
🔑 Gabarito de Código & Solução Comentada
// composables/useFetch.ts
import { ref, watchEffect } from 'vue';
export function useFetch<T>(url: string) {
const data = ref<T | null>(null);
const loading = ref(true);
const error = ref<string | null>(null);
watchEffect(async () => {
loading.value = true;
error.value = null;
try {
const res = await fetch(url);
data.value = await res.json();
} catch (e: any) {
error.value = e.message;
} finally {
loading.value = false;
}
});
return { data, loading, error };
}
⚡ Nível 3: Integração
Problema 08.3 — Composable useLocalStorage com Sincronização Reativa
Contexto: Composable useLocalStorage com Sincronização Reativa no contexto de Criação de Composables Reutilizáveis.
Requisitos de Execução:
- Criar
useLocalStorage(key, defaultVal)mantendo ref sincronizada com o armazenamento local.
Resultado Esperado
Estado reativo persistido automaticamente no LocalStorage.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_08_3_SeuNome - Envie na tarefa:
Atividade Cap 08 - Criação de Composables Reutilizáveis
🔑 Gabarito de Código & Solução Comentada
// composables/useLocalStorage.ts
import { ref, watch } from 'vue';
export function useLocalStorage<T>(key: string, valorPadrao: T) {
const armazenado = localStorage.getItem(key);
const dado = ref<T>(armazenado ? JSON.parse(armazenado) : valorPadrao);
watch(dado, (novoValor) => {
localStorage.setItem(key, JSON.stringify(novoValor));
}, { deep: true });
return dado;
}
🏆 Nível 4: Desafio Corporativo
Problema 08.4 — Composable useDebounceFn para Rate Limiting de Eventos
Contexto: Composable useDebounceFn para Rate Limiting de Eventos no contexto de Criação de Composables Reutilizáveis.
Requisitos de Execução:
- Criar composable de debounce para adiar execuções de digitação na busca.
Resultado Esperado
Digitação contínua atrasada com debounce de 300ms.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_08_4_SeuNome - Envie na tarefa:
Atividade Cap 08 - Criação de Composables Reutilizáveis
🔑 Gabarito de Código & Solução Comentada
// composables/useDebounceFn.ts
export function useDebounceFn<T extends (...args: any[]) => any>(fn: T, delay: number = 300) {
let timer: any = null;
return (...args: Parameters<T>) => {
clearTimeout(timer);
timer = setTimeout(() => fn(...args), delay);
};
}
| ⬅️ Voltar ao Índice de Exercícios | 📚 Sumário de Tópicos |