When using reactive variables by declaring them using the $:
syntax, you get the following error.
Cannot access 'variable_name' before initialization
Here is the code:
App.svelte
<script>
import { ledzep, redhotchilis } from './data.js'
$: bandmembers = [...ledzep, ...redhotchilis]
let namesWithA = bandmembers.filter(d => {
if (d.indexOf('a') > 0) {
return true;
}
else {
return false
}
})
</script>
<h2>Band Members</h2>
<ul>
{#each bandmembers as member}
<li>{member}</li>
{/each}
</ul>
<h2>Members with "A" in their names</h2>
<ul>
{#each namesWithA as member}
<li>{member}</li>
{/each}
</ul>
data.js
export const ledzep = ["Jimmy Page", "John Bonham", "Robert Plant", "John Paul Jones"]
export const redhotchilis = ["Anthony Kiedis", "Flea", "Chad Smith", "Josh Klinghoffer"]
When you assign variables using $:
you cannot assign them as part of other variables declared using let
, const
, or var
.
When you do assignments using $:
, you can only use them in other variables assigned using $:
. In the code posted above, you need to change the following lines:
let namesWithA = bandmembers.filter(d => {
if (d.indexOf('a') > 0) {
return true;
}
else {
return false
}
})
to the following:
$: namesWithA = bandmembers.filter(d => {
if (d.indexOf('a') > 0) {
return true;
}
else {
return false
}
})
It took me a while to figure this out and just wanted to share this with any other Svelte newbies that are starting out in this new technology.