up::
same:: React
Javascriptのフロントエンドフレームワーク。
これまでは仮想DOMというのが主流だった。
HTML構造をJavascriptでオブジェクト化複製、都度Diff取ってHTMLに反映していた。React等。
Svelteは事前コンパイルでDOMの変更があった部分のみを変更するコードを作成し適用する。今までが実行時解釈だったのに対し、これはビルド時に解釈して変換する。
またコンポーネントをJSXでなくHTML、CSS、jsの記法で書くのも特徴。
Reactから来てJSX使いたいならSolid.jsへ。
フレームワーク「Svelte」「Solid」が話題。画期的だった仮想DOMと脱仮想DOMへの流れ | レバテックラボ(レバテックLAB)
基礎
.svelteという見慣れないファイルがあるが、中身はほぼHTML。
これにJSの変数とか簡単に使えるようにしたのがsvelte。
(この説明だとほとんどのフレームワークそうだな)
たいていは<script>
,<body>
,<style>
で出来てるっぽい。
中括弧
scriptタグ内にJSを書ける。
HTML中で中括弧を使うと、JSで公開されている変数を使うことができる。
中括弧内はJSコードとして解釈されているので、メソッドも使える。
<script lang="ts">
let name = 'Svelte';
</script>
<h1>Hello {name.toUpperCase()}!</h1>
中括弧はテキストだけでなく要素属性でも使用可能。
svelteはアクセシビリティ関係のエラーを出す。
例えばimgは読み上げ用のaltがないとエラーが出る。
src={src}
のように、属性名と値の変数が一致する場合は省略できる。
<script>
let src = '/tutorial/image.gif';
let name = 'John';
</script>
<img {src} alt='{name} dances.'/>
スタイリング
<style>
タグ内ではコンポーネントにCSSを適用できる。
試しにpタグに直接適用する。
<p>This is a paragraph.</p>
<style>
p {
color: goldenrod;
font-family: 'Comic Sans MS', cursive;
font-size: 2em;
}
</style>
これはここにあるpタグのみに適用される。
他からインポートしたりしたpタグには影響しない。
Nested Components
svelteは実質htmlなので、ネストできる。
イメージはsvelteファイル一つでレンダリングしたhtmlを入れ子にする感じ。
といっても外面はhtmlでなくsvelteコンポーネントなので、まずはJSらしく<script>
でimportする。
それをJSXのように<name />
で入れる、という流れ。
<script lang="ts">
import Nested from './Nested.svelte'
</script>
<p>This is a paragraph.</p>
<Nested />
<style>
p {
color: goldenrod;
font-family: 'Comic Sans MS', cursive;
font-size: 2em;
}
</style>
HTML tags
変数内の文字列などは、通常プレーンテキストとして挿入される。
しかし場合によっては、文字列をコンポーネントとしてレンダリングしてほしい時がある。
このような場合、中括弧の文字列展開にタグをつける。
<script>
let string = `this string contains some <strong>HTML!!!</strong>`;
</script>
<p>{@html string}</p>
@htmlを挿入することで、HTMLとして挿入可能。