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
<meta
12
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.