🧩 Exercícios: Teleport e Suspense para Componentes Assíncronos
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 12.1 — Teletransporte de Modais para o <body> com
Contexto: Teletransporte de Modais para o <body> com
Requisitos de Execução:
- Renderizar modal fora da hierarquia visual do componente pai usando
<Teleport to='body'>.
Resultado Esperado
Modal teletransportado para o final da tag `<body>` evitando problemas de z-index.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_12_1_SeuNome - Envie na tarefa:
Atividade Cap 12 - Teleport e Suspense para Componentes Assíncronos
🔑 Gabarito de Código & Solução Comentada
<!-- ModalTeleport.vue -->
<script setup lang="ts">
import { ref } from 'vue';
const aberto = ref(false);
</script>
<template>
<button @click="aberto = true">Abrir Modal</button>
<Teleport to="body">
<div v-if="aberto" class="modal-overlay">
<div class="modal-content">
<h3>Modal no Body</h3>
<button @click="aberto = false">Fechar</button>
</div>
</div>
</Teleport>
</template>
🔍 Nível 2: Prática
Problema 12.2 — Teleporte Condicional com Prop :disabled
Contexto: Teleporte Condicional com Prop :disabled no contexto de Teleport e Suspense para Componentes Assíncronos.
Requisitos de Execução:
- Desabilitar teletransporte em dispositivos móveis mantendo o elemento inline via
:disabled='isMobile'.
Resultado Esperado
Teleport desabilitado responsivamente em telas pequenas.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_12_2_SeuNome - Envie na tarefa:
Atividade Cap 12 - Teleport e Suspense para Componentes Assíncronos
🔑 Gabarito de Código & Solução Comentada
<!-- ResponsiveTeleport.vue -->
<script setup lang="ts">
defineProps<{ isMobile: boolean }>();
</script>
<template>
<Teleport to="#sidebar" :disabled="isMobile">
<div>Menu Lateral</div>
</Teleport>
</template>
⚡ Nível 3: Integração
Problema 12.3 — Carregamento Assíncrono com e Fallback Skeleton
Contexto: Carregamento Assíncrono com
Requisitos de Execução:
- Envolver componente assíncrono com
<Suspense>exibindo skeleton de carregamento no#fallback.
Resultado Esperado
Fallback visual exibido enquanto o componente assíncrono resolve sua promise.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_12_3_SeuNome - Envie na tarefa:
Atividade Cap 12 - Teleport e Suspense para Componentes Assíncronos
🔑 Gabarito de Código & Solução Comentada
<!-- SuspenseLoader.vue -->
<script setup lang="ts">
import AsyncUserProfile from './AsyncUserProfile.vue';
</script>
<template>
<Suspense>
<template #default><AsyncUserProfile /></template>
<template #fallback><div class="skeleton-card">Carregando dados...</div></template>
</Suspense>
</template>
🏆 Nível 4: Desafio Corporativo
Problema 12.4 — Componentes Assíncronos com defineAsyncComponent e Retry
Contexto: Componentes Assíncronos com defineAsyncComponent e Retry no contexto de Teleport e Suspense para Componentes Assíncronos.
Requisitos de Execução:
- Declarar componente assíncrono com
defineAsyncComponent({ loader, loadingComponent, delay: 200, timeout: 3000 }).
Resultado Esperado
Carregamento assíncrono robusto com tratamento de timeout e delay.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_12_4_SeuNome - Envie na tarefa:
Atividade Cap 12 - Teleport e Suspense para Componentes Assíncronos
🔑 Gabarito de Código & Solução Comentada
// asyncComponent.ts
import { defineAsyncComponent } from 'vue';
import LoadingSpinner from './LoadingSpinner.vue';
export const AsyncChart = defineAsyncComponent({
loader: () => import('./HeavyChart.vue'),
loadingComponent: LoadingSpinner,
delay: 200,
timeout: 5000,
});
| ⬅️ Voltar ao Índice de Exercícios | 📚 Sumário de Tópicos |