この記事では、Fusor ライブラリを使用して再利用可能な Web コンポーネントを開発する方法と、その利点について説明します。
このようなコンポーネントは、React、Angular、Vue、Solid、Svelte などを使用して作成されたものと同等の本格的な Web アプリケーションに組み込むことができます。
Fusor API は、2 つの の主要関数のみで構成されています:
さらに、次のようなめったに使用されない関数がいくつかあります:
この特別なオブジェクトについて何も知る必要はありません。
import { getElement } from "@fusorjs/dom"; const count = 0; // Create via JSX const message = <div>Seconds {count} elapsed</div>; document.body.append(getElement(message)); // Get
create と get API 関数を使用しました。
import { div } from "@fusorjs/dom/html"; const message = div("Seconds ", count, " elapsed"); // Create
import { getElement, update } from "@fusorjs/dom"; let count = 0; const message = <div>Seconds {() => count} elapsed</div>; // Create document.body.append(getElement(message)); // Get setInterval(() => { count += 1; update(message); // Update }, 1000);
update API 関数を使用しました。 DOM 要素とそのすべての子を再帰的に更新します。関数の結果から新しい値を取得し、動的にします。
子、属性、プロパティはすべて動的にすることができます。
<div class={() => (toggle ? "on" : "off")} />
DOM の更新は、新しい値が現在の値と異なる場合にのみ行われます。
ほとんどの場合、通常どおりパラメータを設定します。
<div style="padding:1em" />
ただし、属性とプロパティを区別する必要がある場合があります。 タイプを指定するには、名前に _a または _p 接尾辞を追加します:
<div name1_a="attribute" name2_p="property" />
イベント ハンドラーを追加するには、常に _e 接尾辞を使用する必要があります:
<div click_e={() => "event handler"} />
追加のタイプがあり、その一部は完全な W3C 標準 互換性を確保するために追加の オプションを取ることができます:
<div click_e_capture_once={() => "event handler"} />
Fusor の特別なオブジェクトを使用してコンポーネントを作成します。状態とパラメータを関数内にカプセル化します。コンポーネント名は大文字にしてください。
これはカウント ボタン コンポーネントの例です:
import { getElement, update } from "@fusorjs/dom"; const CountingButton = (props) => { let count = props.count ?? 0; // Init State const self = ( <button click_e={() => { count += 1; update(self); }} > Clicked {() => count} times </button> ); return self; }; const App = () => ( <div style="padding:1em"> <p>Three counting buttons</p> <CountingButton /> <CountingButton count={22} /> <CountingButton count={333} /> </div> ); document.body.append(getElement(App()));
CountingButton コンポーネントは、アプリケーションの残りの部分に影響を与えることなく、独自の DOM 要素の 一部 のみを更新します。
上記のコンポーネントがどのように機能するかを完全に理解したら、同じ結果を達成しながら、少し短い方法で書き直すことができます。
const CountingButton = ({ count = 0 }) => ( <button click_e={(event, self) => { count += 1; update(self); }} > Clicked {() => count} times </button> );
すべてのイベント ハンドラー コールバック関数は、標準イベント オブジェクトと現在の特殊オブジェクトという 2 つの引数を受け取ります。
もう一度、上記の例を理解できたら、同じコンポーネントの最短バージョンを確認してください:
const CountingButton = ({ count = 0 }) => ( <button click_e_update={() => (count += 1)}> Clicked {() => count} times </button> );
イベント ハンドラー コールバックが呼び出された後にコンポーネントを更新するための更新オプションを追加しました。これは前の例と同等です。
実際のアプリケーションの開発に入る前に理解する必要がある最後の側面は、コンポーネントのライフサイクルです。
これは 4 つのステージのみで構成されます:
import { getElement, update } from "@fusorjs/dom"; const IntervalCounter = ({ count = 0 }) => { console.log("1. Create the component"); return ( <div mount={(self) => { console.log("2. Connect to the DOM"); const timerId = setInterval(() => { count++; update(self); console.log("3. Update the DOM"); }, 1000); return () => { clearInterval(timerId); console.log("4. Disconnect from the DOM"); }; }} > Since mounted {() => count} seconds elapsed </div> ); }; const instance = <IntervalCounter />; const element = getElement(instance); document.body.append(element); setTimeout(() => element.remove(), 15000);
マウント プロパティには、コンポーネントが DOM に追加されたときに実行される関数があります。この関数は 1 つの引数、つまり現在の特別なオブジェクトを取ります。コンポーネントが DOM から削除されたときに実行される別の関数を返すこともできます。
私たちはライフサイクルのこれら 4 つの段階を完全に制御します。これにより、さまざまな戦略やアニメーション フレームを念頭に置き、カスタムの 非同期 または 同時 メソッドを使用してコンポーネントを作成、更新、比較 できるようになります。
このチュートリアルからわかるように、Fusor はシンプル、簡潔、そして明示的です。ほとんどの場合、2 つの API 関数のみを使用します。ただし、必要に応じて多くの制御と柔軟性も提供します。
タイトルの質問に答えると、Fusor はフレームワークではなく小さな JavaScript ライブラリですが、他のフレームワークと同じ結果を達成できます。
上記の例はすべて CodeSandbox で入手できます。
SVG アナログ時計の例もチェックしてください。
これは実際のアプリケーションです。
定型スターター プロジェクト:
以上が新しいフロントエンドフレームワーク?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。