Conceptos y Uso de las Etiquetas Especiales (Special tags) y Directivas en Svelte
- 736Palabras
- 4Minutos
- 03 Jul, 2024
En Svelte, además de las etiquetas HTML y etiquetas de componentes comunes, existen algunas etiquetas especiales (Special tags) y directivas que proporcionan funciones y capacidades adicionales para manejar la cabecera, la carga dinámica de componentes, la escucha de eventos globales, entre otros. En este artículo, detallaremos las etiquetas especiales y directivas más comunes en Svelte y su uso.
<svelte:head>
La etiqueta <svelte:head> se utiliza para modificar dinámicamente la información del encabezado del documento en un componente, como el título (<title>) y las metaetiquetas (<meta>). En un componente Svelte solo puede haber una etiqueta <svelte:head>, y se usa comúnmente junto con los hooks del ciclo de vida de Svelte.
Ejemplo de Código
1<script>2 import { onMount } from "svelte";3
4 onMount(() => {5 document.querySelector("title").innerText = "Dynamic Title";6 });7</script>8
9<svelte:head>10 <title>Hello Svelte!</title>11 <meta12 name="description"13 content="This is a demo of using Svelte's special tags and directives."14 />15</svelte:head>En este ejemplo, la etiqueta <svelte:head> se utiliza para establecer el título y la descripción del documento. En el hook de ciclo de vida onMount, modificamos dinámicamente el título del documento.
<svelte:component>
La etiqueta <svelte:component> se utiliza para cargar y renderizar componentes Svelte dinámicamente. Permite cargar selectivamente diferentes componentes en tiempo de ejecución, permitiendo cambiar componentes dinámicamente.
Ejemplo de Código
1<script>2 import FirstComponent from "./FirstComponent.svelte";3 import SecondComponent from "./SecondComponent.svelte";4
5 let showFirst = true;6
7 function toggleComponent() {8 showFirst = !showFirst;9 }10</script>11
12<button on:click={toggleComponent}>Toggle Component</button>13
14<svelte:component this={showFirst ? FirstComponent : SecondComponent} />En este ejemplo, según el valor de showFirst, se renderiza dinámicamente FirstComponent o SecondComponent.
<svelte:window>
La etiqueta <svelte:window> se utiliza para escuchar y manejar eventos globales de la ventana en un componente, como eventos de resize, scroll, entre otros.
Ejemplo de Código
1<script>2 function handleResize() {3 console.log("Window resized!");4 }5</script>6
7<svelte:window on:resize={handleResize} />En este ejemplo, cuando el tamaño de la ventana cambia, se dispara la función handleResize.
<svelte:body>
La etiqueta <svelte:body> se utiliza para modificar dinámicamente la parte del cuerpo del documento (<body>) en un componente, pudiendo agregar estilos globales o JavaScript dinámicamente.
Ejemplo de Código
1<svelte:body>2 <script>3 console.log('This script will be inserted into the document body.');4 </script>5</svelte:body>En este ejemplo, el código dentro de la etiqueta <script> se inserta en el <body> del documento.
<svelte:self>
La etiqueta <svelte:self> se utiliza para referenciarse a sí mismo de manera recursiva dentro de un componente, permitiendo la creación de estructuras recursivas de componentes.
Ejemplo de Código
1<script>2 let count = 0;3
4 function increment() {5 count += 1;6 }7</script>8
9<button on:click={increment}>Increment</button>10
11{#if count < 5}12 <svelte:self />13{/if}14
15<p>Count: {count}</p>En este ejemplo, se referencia recursivamente a sí mismo, creando un contador simple que se detiene cuando el valor del contador es menor a 5.
Directivas: @html, @const, @debug
Además de las etiquetas especiales, Svelte también proporciona algunas directivas útiles para controlar el comportamiento de renderizado, optimizar el rendimiento, entre otros.
Directiva @html
La directiva @html se utiliza para renderizar una cadena de código HTML, permitiendo omitir el escape de HTML predeterminado de Svelte y insertar la cadena directamente como HTML en el documento.
Ejemplo de Código
1<script>2 let htmlContent = "<strong>Hello Svelte!</strong>";3</script>4
5{@html htmlContent}En este ejemplo, el contenido de htmlContent se inserta como HTML en el documento, mostrándose como “Hello Svelte!” en negrita.
Directiva @const
La directiva @const se utiliza para declarar constantes, ayudando a Svelte a optimizar en tiempo de compilación y reducir la carga de cálculo en tiempo de ejecución.
Ejemplo de Código
1<script>2 export let boxes;3</script>4
5{#each boxes as box}6 {@const area = box.width * box.height}7 {box.width} * {box.height} = {area}8{/each}En este ejemplo, @const define una constante local. {@const} solo se permite como hijo directo de {#if}, {:else if}, {:else}, {#each}, {:then}, {:catch}, <Component />, <svelte:fragment />.
Directiva @debug
La directiva @debug se utiliza para depurar y registrar valores de variables en la consola, comúnmente utilizada durante el desarrollo para depurar el código.
Ejemplo de Código
1<script>2 let user = {3 firstname: 'Ada',4 lastname: 'Lovelace'5 };6</script>7
8<!-- Compilado -->9{@debug user}10{@debug user1, user2, user3}11
12<!-- No compilado -->13{@debug user.firstname}14{@debug myArray[0]}15{@debug !isReady}16{@debug typeof user === 'object'}17
18<h1>Hello {user.firstname}!</h1>La etiqueta {@debug ...} proporciona una alternativa a console.log(...). Cuando cambian los valores de variables específicas, los registra y pausa la ejecución del código cuando se abren las herramientas de desarrollo.
{@debug ...} acepta una lista de nombres de variables separados por comas (no expresiones arbitrarias).
Conclusión
A través de este artículo, hemos aprendido los conceptos y el uso de las etiquetas especiales y directivas más comunes en Svelte. Estas etiquetas y directivas proporcionan más flexibilidad y funcionalidad a Svelte, permitiendo manejar mejor contenido dinámico, eventos globales, recursión de componentes, y optimizar el comportamiento de renderizado, entre otros escenarios.