Logo

dev-resources.site

for different kinds of informations.

Renderización Dinámica de Componentes en Vue 3 y Nuxt 3: Guía Práctica y Caso Real

Published at
6/30/2024
Categories
nuxt
espanol
vue
nuxt3
Author
nyambe
Categories
4 categories in total
nuxt
open
espanol
open
vue
open
nuxt3
open
Author
6 person written this
nyambe
open
Renderización Dinámica de Componentes en Vue 3 y Nuxt 3: Guía Práctica y Caso Real

Componentes dinámicos en Vue y Nuxt: Guía Práctica y Caso Real

Nuxt 3 ofrece una forma flexible y muy potente de renderizar diferentes componentes basados en condiciones dinámicas. Esto es especialmente útil cuando el componente exacto a renderizar no se puede determinar hasta el tiempo de ejecución.

Configuración Básica

Para empezar, asegúrate de tener un componente que deseas resolver dinámicamente. Por ejemplo, supongamos que tenemos un componente llamado MyButton que queremos usar dinámicamente:

<script setup lang="ts">
import { SomeComponent } from '#components'

const MyButton = resolveComponent('MyButton')
</script>
Enter fullscreen mode Exit fullscreen mode

En el script anterior, usamos resolveComponent para resolver dinámicamente el componente MyButton. Este método es útil cuando los componentes necesitan cargarse de manera condicional o cuando se trata de aplicaciones grandes donde los componentes se cargan bajo demanda.

Uso de Componentes Dinámicos en Plantillas

Una vez que hemos resuelto nuestros componentes, podemos usarlos en la sección de la plantilla. La etiqueta <component> en Vue 3 (y por lo tanto en Nuxt 3) permite la renderización dinámica de componentes. Aquí tienes un ejemplo:

<template>
  <component :is="clickable ? MyButton : 'div'" />
  <component :is="SomeComponent" />
</template>
Enter fullscreen mode Exit fullscreen mode

En esta plantilla:

  1. La primera etiqueta <component> usa una operación ternaria para decidir si renderizar el componente MyButton o un simple elemento div basado en la condición clickable.
  2. La segunda etiqueta <component> renderiza SomeComponent directamente.

Explicación Técnica

  • resolveComponent: Esta función se utiliza para resolver dinámicamente un componente por su nombre. Devuelve un componente que se puede usar en tu plantilla.
  • <component :is="...">: Esta etiqueta especial de componente te permite especificar qué componente renderizar dinámicamente usando el atributo :is.

Beneficios de los Componentes Dinámicos

  • Flexibilidad: Los componentes dinámicos permiten a los desarrolladores crear aplicaciones más flexibles y modulares. Los componentes pueden renderizarse basándose en interacciones del usuario, el estado de la aplicación u otras condiciones dinámicas.

Ejemplo en un Caso Real

En un caso real, necesitaba cargar dinámicamente componentes según la ruta. Aquí tienes un ejemplo de cómo se puede lograr esto:

<script lang="ts" setup>
import { UiVerticalNavigation, UiNavigationAccordion, UiBreadCrumbs } from '#components';
const route = useRoute()
const component = route.params.component as string

const componentList = [
  {
    label: 'Vertical Navigation',
    id: 'vertical-navigation',
    component: UiVerticalNavigation
  },
  {
    label: 'Navigation Links (PRO)',
    id: 'navigation-accordion',
    component: UiNavigationAccordion,
    pro: true
  },
  {
    label: 'Breadcrumbs',
    id: 'breadcrumbs',
    component: UiBreadCrumbs
  }
]

const currentComponent = componentList.find(c => c.id === component)
</script>

<template>
  <UContainer class="p-5 mt-32">
   <div v-if="component && currentComponent">
     <h1 class="text-4xl font-bold py-4">{{ currentComponent.label }}</h1>
     <component :is="currentComponent.component" />
   </div>
   <div v-else class="">
     <h1 class="text-4xl font-bold">Component not found</h1>
   </div>
  </UContainer>
</template>

<style>
</style>
Enter fullscreen mode Exit fullscreen mode

En este ejemplo:

  1. Importación de Componentes: Importamos los componentes que queremos renderizar dinámicamente (UiVerticalNavigation, UiNavigationAccordion, UiBreadCrumbs).
  2. Obtención de la Ruta: Utilizamos useRoute para obtener la ruta actual y el parámetro component de la URL.
  3. Lista de Componentes: Creamos una lista de componentes con sus etiquetas, identificadores y referencias a los componentes importados.
  4. Selección del Componente Actual: Encontramos el componente actual en la lista basado en el identificador de la URL.
  5. Renderización en la Plantilla: Utilizamos <component :is="currentComponent.component" /> para renderizar el componente seleccionado dinámicamente. Si no se encuentra el componente, mostramos un mensaje de "Component not found".

Este enfoque permite que la aplicación cargue y renderice componentes específicos basados en la ruta actual, lo cual es útil para crear interfaces de usuario dinámicas y adaptativas.

Conclusión

Usa componentes dinámicos, es un recurso que te puede ahorra muchos dolores de cabeza

espanol Article's
30 articles in total
Favicon
Las claves para NO romperlo TODO: Branches en Git 🚨🔑
Favicon
¡Primeros pasos en GIT! GIT para PRINCIPIANTES
Favicon
Dockerando una aplicación de Angular
Favicon
Resolviendo Preguntas Determinísticas con IA Generativa: Un Enfoque Práctico
Favicon
Comprendiendo la copia profunda en JavaScript
Favicon
Cursor Ai: Gracias, pero no gracias.. todavía
Favicon
Renderización Dinámica de Componentes en Vue 3 y Nuxt 3: Guía Práctica y Caso Real
Favicon
Exportar tabla con JQuery
Favicon
GPS Visualizer
Favicon
Cómo scrapear artículos de prensa en pocos clics
Favicon
Sé ese profesional
Favicon
Configurar Solana en Linux
Favicon
Iniciar sesion en mongodb con usuario y contraseña | Mongodb
Favicon
Conectar con ssh de mac a ubuntu
Favicon
Introducción a Typescript: ¿Huir o Abrazarlo con Pasión?"
Favicon
Android Studio
Favicon
Dev.to en español
Favicon
Pruebas Estáticas vs Unitarias vs Integración vs E2E para Aplicaciones Frontend
Favicon
Artix Linux - Instalacion
Favicon
¿Por Qué Aprender Linux Es Tu Prioridad #1?
Favicon
Configurar git con GitHub
Favicon
Carpetas doble de OneDrive (Windows 10)
Favicon
Problemas al cambiar la ubicacion predeterminada de carpetas en Windows 10
Favicon
Configurando neovim
Favicon
¿Cómo crear un Carrusel con Next y Chakra UI?
Favicon
Interactuar con contratos en Ethereum
Favicon
Mejora tu productividad como desarrollador: Window Managers
Favicon
SwiftUI Desde Abajo
Favicon
Minitutorial Django: Enviar correo con gmail
Favicon
Tutorial Android Studio: Obtener token de mi dispositivo

Featured ones: