Svelte は長い間存在しており、私はいつもわかりやすい原理分析記事を書きたいと思っていました。長い間先延ばしにしていましたが、ついにそれを書きました。 デモ1まず、コンパイル プロセスを見てみましょう。次の <h1>{カウント}</h1> <スクリプト> count = 0 とします。 </スクリプト> このコードはコンパイラによってコンパイルされると、次の 3 つの部分で構成されるコードを生成します。
// 一部のコードを省略します... 関数create_fragment(ctx) { h1とします。 戻る { c() { h1 = 要素("h1"); h1.textContent = `${count}`; }, m(ターゲット, アンカー) { 挿入(ターゲット、h1、アンカー); }, d(切り離し) { if (デタッチ) detach(h1); } }; } count = 0 とします。 クラスAppはSvelteComponentを拡張します{ コンストラクタ(オプション) { 素晴らしい(); init(this、オプション、null、create_fragment、safe_not_equal、{}); } } デフォルトのアプリをエクスポートします。 フラグメントの作成まず、 h1 = 要素("h1"); h1.textContent = `${count}`; 挿入(ターゲット、h1、アンカー); 関数挿入(ターゲット、ノード、アンカー) { target.insertBefore(ノード、アンカー || null); } if (デタッチ) detach(h1); 関数 detach(ノード) { ノードの親ノードを削除します。 } フローチャートをよく見ると、 これは、 スヴェルトコンポーネント各コンポーネントは、 クラスAppはSvelteComponentを拡張します{ コンストラクタ(オプション) { 素晴らしい(); init(this、オプション、null、create_fragment、safe_not_equal、{}); } } 要約すると、
状態を変更できるデモここで、 <h1 on:click="{update}">{count}</h1> <スクリプト> count = 0 とします。 関数 update() { カウント++; } </スクリプト> コンパイルされた製品の変更、および // モジュールのトップレベルの宣言から let count = 0; // インスタンスメソッドになる function instance($$self, $$props, $$invalidate) { count = 0 とします。 関数 update() { $$ 無効化(0, count++, count); } [count, update]を返します。 } // テンプレートに3つのアプリを定義する <アプリ/> <アプリ/> <アプリ/> // count が不変の場合、ページは次のようにレンダリングされます: <h1>0</h1> <h1>0</h1> <h1>0</h1> <h1>0</h1> <h1>3</h1> <h1>1</h1> したがって、各
見つかった変数は 同時に、上記の操作を実行するステートメントがテンプレートを通じて参照できる場合、そのステートメントは
したがって、コンパイルされた // ソースコードの更新 関数 update() { カウント++; } // コンパイルされたインスタンスで更新 関数 update() { $$ 無効化(0, count++, count); }
c() { h1 = 要素("h1"); //countの値はctxから取得されます t = text(/*count*/ ctx[0]); }, m(ターゲット, アンカー) { 挿入(ターゲット、h1、アンカー); 追加(h1, t); // イベントバインディング dispose = listen(h1, "click", /*update*/ ctx[1]); }, p(ctx, [ダーティ]) { // set_data は t に格納されているテキスト ノードを更新します。if (dirty & /*count*/ 1) set_data(t, /*count*/ ctx[0]); }, d(切り離し) { if (デタッチ) detach(h1); // イベントのバインド解除 dispose(); } // UI 内の複数の状態を参照する<h1 on:click="{count0++}">{count0}</h1> <h1 on:click="{count1++}">{count1}</h1> <h1 on:click="{count2++}">{count2}</h1> 対応する p(new_ctx, [ダーティ]) { ctx = new_ctx; if (dirty & /*count*/ 1) set_data(t0, /*count*/ ctx[0]); if (dirty & /*count1*/ 2) set_data(t2, /*count1*/ ctx[1]); if (dirty & /*count2*/ 4) set_data(t4, /*count2*/ ctx[2]); },
上記は、JavaScript 開発における Svelte の実装原則の詳細な説明の詳細な内容です。Svelte の実装原則の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
>>: HTML+CSS で div タグの右上隅に削除アイコンを追加するサンプルコード
目次序文🍹準備🍲vue3 の使い方🍖 実装要約する序文最近、私の最初の公式 vue3 + ts プロ...
この記事では、グラフィック認証コードログインを実装するためのVueの具体的なコードを参考までに紹介し...
VMware で Linux 仮想マシンを作成し、VMware と仮想マシンのネットワークを設定する...
この記事では、jQueryプラグインを使用してマインスイーパゲームを実装する2番目の記事を参考までに...
Linuxシステムでは、dockerを新しくインストールし、次のようなコマンドを入力します。dock...
オリジナルリンクhttps://github.com/XboxYan/no…ボタンは、おそらく We...
目次Dockerを起動するDockerを停止するPython 呼び出しスクリプト最近、日々のテストで...
かなり前の記事で、 -webkit-box-reflectプロパティについて説明しました。リフレクシ...
この記事では、ネストされたタブ機能を実装するためのjQueryの具体的なコードを参考までに紹介します...
テーブルページを作成するときに、td に設定された幅が無効になることがあります。td の幅は常に内部...
MySQL ストアド プロシージャは、確かに、非常にまれな使用シナリオのように見えます。この問題は、...
フロートはWebページのレイアウトでよく使用されますが、フローティングブロックレベル要素は標準のドキ...
Tensorflow バージョンと Cuda および CUDNN の対応: https://tens...
プロジェクトシナリオ: 1. アップロードファイルの制限関数: 1. フロントエンド操作による異常な...