I was with you on this topic, and I have rants about this elsewhere.
But with Svelte 3 I actually agree with their choice now:
1. The extra templating syntax is rather small and concise. And explicit.
- There are very few directives, and they follow the same rules: `{# start block }{: alternative branch}{/end block}`
- external data that comes from Javascript is always `{data}`
- properties of html components that can be bound are always `prop:name|modifiers={data}`
This is in contrast to, say, Vue, where the syntax can never decide where it's going.
And compared to React, this isn't Javascript either if we think about it:
{
svelte.each(cats, ({ id, name }) => <p>Hello {name}</p>)
}
That's a specific extension that compiles to Javascript
2. Your work becomes MVC-ish
Your template/html becomes "I have some data, let's display it". And since the template syntax doesn't allow arbitrary logic, you end up collocating transformations of your data with the code that's fetching it. Instead of doing some weird logic inside the template like `data.map.filter.map`
3. But to each their own :)
What really turned me towards Svelte is going through the tutorial and then trying it. It really is good :)