Getting references to Components generated in an each block
Using bind:this
allows a component to store a reference to its children. This can also be used when generating a series of components in an {#each}
block.
Method 1: Using an array
This method simply binds the generated component to an array element based on its index within the loop.
<script>
import Child from './Child.svelte';
const array = [
{ id: 1, title: 'apple' },
{ id: 2, title: 'banana' }
];
const children = [];
</script>
{#each array as item, i}
<Child title={item.title} bind:this={children[i]} />
{/each}
Method 2: Using an object as a hashtable
An alternative is to use a unique key and bind the component to an object, effectively making a hashtable of components.
<script>
import Child from './Child.svelte';
const array = [
{ id: 1, title: 'apple' },
{ id: 2, title: 'banana' }
];
const children = {};
</script>
{#each array as item, i (item.id)}
<Child title={item.title} bind:this={children[item.id]} />
{/each}