Estructuras de ciclo for en documento HTML:
Opción 1:
{#each skills as {name}, i}
<li>{name}</li>
{/each}
Opción 2:
{#each skills as skill, i}
<li>{skill.name}</li>
{/each}
Mostrar listas dinámicas es una de las tareas más frecuentes al construir interfaces. En Svelte, la estructura de control each permite recorrer un arreglo y renderizar cada elemento directamente en la vista, sin necesidad de métodos adicionales. A continuación se explica paso a paso cómo crear un componente de habilidades que itera sobre un arreglo de objetos y los presenta con estilos limpios.
¿Cómo crear el componente Skills con un arreglo de objetos?
El primer paso es crear un archivo llamado Skills.svelte dentro de la carpeta de componentes, siguiendo la convención de nombres con la primera letra en mayúscula [0:20]. Dentro del bloque <script> se define la lógica del componente, que en este caso consiste en declarar un arreglo de objetos con la información de cada habilidad:
svelte
<script> let skills = [ { id: 1, name: 'HTML' }, { id: 2, name: 'CSS' }, { id: 3, name: 'JavaScript' } ]; </script>Cada objeto posee un id y un name, lo que permite identificar y mostrar cada habilidad de forma ordenada [0:42].
¿Cómo funciona la estructura de control each en Svelte?
Svelte ofrece una sintaxis propia para iterar sobre arreglos directamente en el markup. Se utiliza {#each} para abrir el bloque y {/each} para cerrarlo [1:08]. Dentro se puede acceder a cada elemento del arreglo y, opcionalmente, al índice:
svelte {#each skills as { name }, index}
<li>{name}</li> {/each}En este ejemplo se aplica destructuración sobre cada objeto para extraer únicamente la propiedad name. Esta técnica es útil cuando solo se necesitan uno, dos o hasta tres campos del objeto [1:50].
¿Cuándo conviene no destructurar?
Si el objeto tiene más de tres propiedades que se van a utilizar, la recomendación es recibir el objeto completo como skill y acceder a cada valor con notación de punto: skill.name, skill.id, etc. [2:00]. Esto mantiene el código legible y evita una línea de destructuración demasiado extensa.
¿Cómo se integra el componente en la aplicación principal?
Desde el archivo principal se importa el componente y se coloca en el markup como cualquier etiqueta [2:30]:
svelte
<script> import Skills from './Components/Skills.svelte'; </script> <Skills />Es importante verificar la ruta del import; herramientas de autocompletado pueden duplicar carpetas en la ruta, lo que genera errores [2:42]. Usar plugins de detección de errores en el editor ayuda a identificar typos antes de ver el resultado en pantalla [3:00].
¿Cómo aplicar estilos con scope al componente?
Svelte permite definir estilos con alcance local dentro de la etiqueta <style> de cada componente, de modo que no afectan al resto de la aplicación [3:22]. Para el componente Skills se aplican las siguientes reglas:
svelte
<style> .skills { display: flex; align-items: center; justify-content: center; } ul { margin: 0; padding: 0; list-style: none; } li { display: inline; margin: 0 10px; } </style>align-items y justify-content centran el contenido horizontal y verticalmente.margin, padding y eliminar los bullets con list-style: none produce una lista limpia.display: inline a los <li> coloca las habilidades en una sola línea, con un margen lateral que las separa visualmente [3:50].Con estos pasos el componente muestra HTML, CSS y JavaScript alineados de forma horizontal, iterando automáticamente sobre el arreglo cada vez que se renderiza la vista [4:10].
Si estás experimentando con Svelte, prueba agregar más objetos al arreglo o nuevas propiedades como un icono o un nivel de dominio, y comparte cómo personalizaste tu componente.
Mostrar listas dinámicas es una de las tareas más frecuentes al construir interfaces. En Svelte, la estructura de control each permite recorrer un arreglo y renderizar cada elemento directamente en la vista, sin necesidad de métodos adicionales. A continuación se explica paso a paso cómo crear un componente de habilidades que itera sobre un arreglo de objetos y los presenta con estilos limpios.
El primer paso es crear un archivo llamado Skills.svelte dentro de la carpeta de componentes, siguiendo la convención de nombres con la primera letra en mayúscula [0:20]. Dentro del bloque <script> se define la lógica del componente, que en este caso consiste en declarar un arreglo de objetos con la información de cada habilidad:
svelte
<script> let skills = [ { id: 1, name: 'HTML' }, { id: 2, name: 'CSS' }, { id: 3, name: 'JavaScript' } ]; </script>Cada objeto posee un id y un name, lo que permite identificar y mostrar cada habilidad de forma ordenada [0:42].
Svelte ofrece una sintaxis propia para iterar sobre arreglos directamente en el markup. Se utiliza {#each} para abrir el bloque y {/each} para cerrarlo [1:08]. Dentro se puede acceder a cada elemento del arreglo y, opcionalmente, al índice:
svelte {#each skills as { name }, index}
<li>{name}</li> {/each}En este ejemplo se aplica destructuración sobre cada objeto para extraer únicamente la propiedad name. Esta técnica es útil cuando solo se necesitan uno, dos o hasta tres campos del objeto [1:50].
Si el objeto tiene más de tres propiedades que se van a utilizar, la recomendación es recibir el objeto completo como skill y acceder a cada valor con notación de punto: skill.name, skill.id, etc. [2:00]. Esto mantiene el código legible y evita una línea de destructuración demasiado extensa.
Desde el archivo principal se importa el componente y se coloca en el markup como cualquier etiqueta [2:30]:
svelte
<script> import Skills from './Components/Skills.svelte'; </script> <Skills />Es importante verificar la ruta del import; herramientas de autocompletado pueden duplicar carpetas en la ruta, lo que genera errores [2:42]. Usar plugins de detección de errores en el editor ayuda a identificar typos antes de ver el resultado en pantalla [3:00].
Svelte permite definir estilos con alcance local dentro de la etiqueta <style> de cada componente, de modo que no afectan al resto de la aplicación [3:22]. Para el componente Skills se aplican las siguientes reglas:
svelte
<style> .skills { display: flex; align-items: center; justify-content: center; } ul { margin: 0; padding: 0; list-style: none; } li { display: inline; margin: 0 10px; } </style>align-items y justify-content centran el contenido horizontal y verticalmente.margin, padding y eliminar los bullets con list-style: none produce una lista limpia.display: inline a los <li> coloca las habilidades en una sola línea, con un margen lateral que las separa visualmente [3:50].Con estos pasos el componente muestra HTML, CSS y JavaScript alineados de forma horizontal, iterando automáticamente sobre el arreglo cada vez que se renderiza la vista [4:10].
Si estás experimentando con Svelte, prueba agregar más objetos al arreglo o nuevas propiedades como un icono o un nivel de dominio, y comparte cómo personalizaste tu componente.
Estructuras de ciclo for en documento HTML:
Opción 1:
{#each skills as {name}, i}
<li>{name}</li>
{/each}
Opción 2:
{#each skills as skill, i}
<li>{skill.name}</li>
{/each}
Para mí, este tipo de declaraciones no me gustan. Me recuerdan a los blade template o JSP/JSF y similiares.
Por ejemplo, yo me siento cómodo con este tipo de declaraciones de VueJS:
<ul id="example-1">
<li v-for="item in items" :key="item.message">
{{ item.message }}
</li>
</ul>
Si en lugar de un arreglo quieren recorrer un objeto con esta estructura de control, pueden usarlo así:
<script>
const cats = {
bolaDeNieve: 1,
perlita: 2,
}
</script>
{#each Object.entries(cats) as [cat_name, cat_number]}
{cat_name}: {cat_number}
{/each}
Aun pienso que angular sigue siendo el rey en foreach
Sin duda un each muy muy raro :joy:
Para reiniciar los estilos predefinidos por el navegador (margin, padding) agregen los siguiente en su archivo App.svelte en la etiqueta <style>
:global(*) {
margin: 0px;
padding: 0px;
box-sizing: border-box;
}
Y veran como se quita el margin y el padding que predefine el navegador.
me estaba gustando todo, pero cuando vi el if maso menos y luego cuando vi el forEach ya no me gusto.
Se puede expresar un key que permite identificar de forma exclusiva cada elemento del arreglo. Este key, svelte lo usa para diferenciar cada elemento del arreglo cuando algún dato sea modificado, en caso no establecer el key, al momento de modificar un elemento los agregará al final del arreglo. En cuanto a su sintaxis, este se agrega al final de la expresión del each entre paréntesis, ejemplos:
{#each items as { id, name, qty }, i (id)}
<li>{i + 1}: {name} x {qty}</li>
{/each}
{#each items as item (item.id)}
<li>{item.name} x {item.qty}</li>
{/each}
Aparte de esto, svelte permite crear un bloque en caso de que el arreglo recorrido esté vacío, ejemplo:
{#each todos as todo}
<p>{todo.text}</p>
{:else}
<p>No tasks today!</p>
{/each}
PD: ejemplos tomados de la documentación de svelte.
En esta sintaxis se recibe el objeto completo y se accede a las propiedades del objeto usando la notación de punto, es decir, skill.id y skill.name.
{#each skills as skill}
<p>{skill.id} - {skill.name}</p>
{/each}
En esta sintaxis se destructura el objeto y se accede a sus propiedades directamente, sin necesidad de usar skill.id o skill.name.
{#each skills as { id, name }, i}
<p>{id} - {name}</p>
{/each}
Bueno las estructuras de control dentro de un framework son una característica que los hace diferenciable, en Svelte me recordó mucho a como lo hacían en Symfony(Framework PHP). sin el uso de un Virtual Dom, me parece una buena opción!