国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ ウェブフロントエンド jsチュートリアル Phoenix LiveView、フック、push_event: json_view

Phoenix LiveView、フック、push_event: json_view

Dec 15, 2024 am 09:53 AM

Phoenix LiveView は Elixir 上に構(gòu)築された強力なフレームワークであり、広範(fàn)な Javascript を必要とせずにリアルタイム Web インターフェイスを構(gòu)築するための革新的なアプローチを提供します。

ただし、グラフ作成、視覚化、レンダリング用のライブラリなど、既存のクライアント側(cè)ライブラリとの統(tǒng)合が困難になる場合があります。

この記事では、Phoenix LiveView を DOM に直接レンダリングする Javascript ライブラリと統(tǒng)合する方法を検討します。

フックについて説明します。これにより、指定された要素の特定のライフサイクル要素で Javascript を?qū)g行できるようになり、これらのフックが イベント のストリームをどのように有効にするか ( を使用) LiveView では Push_event、JavaScript では pushEvent) を使用して、雙方向のリアルタイムを可能にします。クライアントとサーバー間の通信。

背景

TLDR: Phoenix LiveView では、フックと Push_event を使用してデータをプッシュし、クライアント側(cè)ライブラリにレンダリングを処理させることができます。

json-view (デモ) - Web ページ上の JSON オブジェクトを展開したり折りたたんだりできるツリーとして表示します。これは、一部のクライアント側(cè) Javascript ライブラリが DOM へのレンダリングと DOM との対話を制御する方法の良い例です。 .

Phoenix LiveView, hooks and push_event: json_view

これを (LiveView) サーバーによって提供される JSON データと統(tǒng)合する方法の例を見てみましょう。イベントに応じてバックエンドから靜的データを送信しますが、このデータは任意のソースから取得される可能性があります。

以下では、mix phx.new を使用し、LiveView を有効にして Phoenix プロジェクトを設(shè)定していることを前提としています。

ライブラリのセットアップ

JavaScript パッケージをページの Javascript の一部として組み込む方法は複數(shù)あります。

推奨設(shè)定の推奨はこの記事の範(fàn)囲外ですが、主に 2 つの方法があります:

  • assets/vendor - 一般的な LiveView プロジェクト テンプレートでは、トップバーはこのディレクトリに配置され、assets/app/app.js エントリポイント ファイルに含まれます。これは、特にライブラリの単一ファイル バージョンが提供されている場合、一般に小さくて安定したライブラリに適しています。
  • NPM/Yarn - esbuild と webpack は、參照された node_modules ファイルを 1 つの配布ファイルにパックできます。これは、より頻繁に変更される、大規(guī)模で複雑なライブラリに適しています。

json-viewの問題

2 つのライブラリを結(jié)合しようとすると、互換性のないレンダリング モデルが 2 つ存在します。

LiveView は 宣言モデル に従います。ビューを設(shè)計し、どのデータを表示するかを決定すると、基礎(chǔ)となるデータが変更されたときに LiveView がページのどの要素を変更する必要があるかを判斷します。

レンダリングでソケット割り當(dāng)てを使用することでこれを?qū)g現(xiàn)します。

def render(assigns) do
  ~H"""
  <p>Hello <%= @name %></p>
  """
 end

ただし、json-view のようなライブラリは 命令型モデル で動作します。 DOM 自體のレイアウトの外側(cè)で、JavaScript でデータを表示するために必要な手順を指定します。

import jsonview from '@pgrabovets/json-view';

const data = '{"name": "json-view", "version": "1.0.0"}'
const tree = jsonview.create(data);
jsonview.render(tree, document.querySelector('.tree'));

これら 2 つのモデルは対立しています。データをレンダリングする 2 つの方法 (宣言型と命令型) を一致させる方法はないようですが、クライアントでリッチなインターフェイスをレンダリングするには json-view のようなライブラリが必要です。

基本的に、サーバーがページ狀態(tài)の変更を要求するときに Javascript コードを?qū)g行する必要があります。これら 2 つのレンダリング モデルを調(diào)整するのに役立つ フック を見てみましょう。

フックのセットアップ

LiveView では、フック は、(ブラウザ) クライアントと (LiveView) サーバー間の雙方向通信を提供する方法であり、通信の中心となるオブジェクトは イベント です。

フックは LiveSocket で定義され、phx-hook 屬性を使用して要素にアタッチされます。コールバックは多數(shù)ありますが、他のすべてはイベント経由で調(diào)整できるため、マウントされたコールバックに焦點を當(dāng)てます。他のライフサイクル イベントにもコールバックを指定できます - ドキュメントを確認(rèn)してください。

マウントされたようなコールバック內(nèi)で、フックは this.pushEvent を使用してイベントをバックエンドに送信し、this.handleEvent を使用して特定のイベント名のハンドラーを登録することでサーバーからのイベントを処理します。

要素ごとに許可されるフックは 1 つだけであることに注意することが重要です。そのため、クライアントとサーバー間のイベントの 1 つのストリームについて推論する必要があるだけです。

この知識を念頭に置いて、イベント ハンドラーを登録する JsonView フックを定義しましょう。最終的に要素に対して jsonview.render を呼び出してデータのツリーをレンダリングします。

import { Socket } from 'phoenix';
import jsonview from '@pgrabovets/json-view';

const JsonViewHook = {
  mounted() {
    this.handleEvent("render_json", ({ data }) => {
      this.el.innerHTML = "";
      const tree = jsonview.create(data);
      jsonview.render(tree, this.el);
    });
  }
}

const liveSocket = new LiveSocket(
  "/live",
  Socket,
  {hooks: { JsonView: JsonViewHook }, ...}
 );
...

これらの數(shù)行のコードでいくつかのことを?qū)g行します。

  1. mounted 関數(shù)を使用して JsonViewHook オブジェクトを定義します。この関數(shù)は、このフックを持つ要素が DOM にマウントされるときに呼び出されます。
  2. mounted 內(nèi)で、「render_json」というカスタム イベントのイベント リスナーを設(shè)定します。このイベントは LiveView からトリガーされます。
  3. イベントを受信すると、レンダリングされる JSON を含む data パラメーターが期待されます。
  4. 要素の既存のコンテンツをクリアします。
  5. jsonview.createjsonview.render を使用して、JSON データを要素にレンダリングします。

このフックを使用するには、フックの名前 (「JsonView」) を持つ phx-hook 屬性を要素に追加するだけです:

<div>



<h2>
  
  
  Sending events to the server
</h2>

<p>We’ll just need to trigger an event from the backend to provide this data. We’ll leave this outside the scope of this article for now - perhaps a button could trigger an event to the backend? - but you could use this.pushEvent from the mounted hook like so:<br>
</p>

<pre class="brush:php;toolbar:false">mounted() {
  this.pushEvent("send_json", {});
}

handle_info で処理できるイベントを LiveView サーバーに送信します。 LiveView ドキ??ュメントの関連セクションでは、ハンドラー関數(shù)を指定して応答ペイロードを直接処理するシナリオなど、this.pushEvent のさらなる可能性について説明しています。

サーバーからイベントを送信する

push_event/3 は、LiveView からブラウザにイベントをプッシュする方法です。マウント時を含め、いつでも呼び出すことができますが、イベントを送信する前に、ページとそのすべての要素が既知の狀態(tài)であることを確認(rèn)することをお勧めします。そうしないと、ページ設(shè)定中にイベントが靜かにドロップされ、予測不能への確実なルートとなります!

クライアントから受け取る可能性のあるイベントの handle_event 句を記述して、イベントをクライアントにプッシュしましょう。

def render(assigns) do
  ~H"""
  <p>Hello <%= @name %></p>
  """
 end

それだけです!そしてここにも柔軟性があります。クライアントとサーバーの両方に名前を付けてイベント ハンドラーを登録すると、イベントの処理とイベントの発生方法が明確に分離されます。

さらなる統(tǒng)合

クライアントとサーバー間の統(tǒng)合の簡単な例を見てきました。これの一般的な拡張は、イベント パラメーターと要素屬性を使用して、特定の更新を特定の要素に限定することです。これは、不必要なイベントとハンドラーの作業(yè)の量を減らすのに役立ちます。

このイベント処理は、クライアント側(cè)ライブラリとバックエンドをより緊密に統(tǒng)合するために拡張することもできます。たとえば、通常、これらの Javascript ライブラリは、より高レベルのユーザー インタラクション イベントを発行します。私たちのライブラリ例である json-view はこれを行いませんが、chart.js のようなグラフ作成ライブラリはこれを行います。

ただし、ユーザー対話の観點から、処理のためにサーバーへのラウンドトリップは一般に避けるべきです。通常、イベントに基づくレンダリングの更新は、クライアント側(cè)のレンダリング ライブラリによって処理されます。

しかし、他の理由でユーザーアクティビティをキャプチャすることは一般的な使用例です。これには、監(jiān)視、ログ記録、分析が含まれます。これらは応答を必要としないため、フック內(nèi)からの PushEvent はサーバー上のこのタイプの非同期処理に最適です。

結(jié)論

DOM の制御を必要とする強力な Javascript クライアント側(cè)ライブラリを統(tǒng)合することは、リッチで動的なユーザー インターフェイスを作成する上で重要な部分です。すべてのページ更新がリアルタイムである必要はないため、LiveView を保持すると、他のページの狀態(tài)を引き続き制御するための強力かつ簡単な方法が提供されます。

LiveView フックとそれに関連するイベントに慣れると、これらをサーバーからのデータと統(tǒng)合できるようになります。また、すべてのユーザーの対話操作でサーバーとの往復(fù)が必要なわけではないこと、また、強力な Javascript ライブラリを使用すると、構(gòu)築するインターフェイスの柔軟性と応答性が向上することにも注意することが重要です。

以上がPhoenix LiveView、フック、push_event: json_viewの詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Java vs. JavaScript:混亂を解消します Java vs. JavaScript:混亂を解消します Jun 20, 2025 am 12:27 AM

JavaとJavaScriptは異なるプログラミング言語であり、それぞれ異なるアプリケーションシナリオに適しています。 Javaは大規(guī)模なエンタープライズおよびモバイルアプリケーション開発に使用されますが、JavaScriptは主にWebページ開発に使用されます。

JSで日付と時間を操作する方法は? JSで日付と時間を操作する方法は? Jul 01, 2025 am 01:27 AM

JavaScriptで日付と時間を処理する場合は、次の點に注意する必要があります。1。日付オブジェクトを作成するには多くの方法があります。 ISO形式の文字列を使用して、互換性を確保することをお勧めします。 2。時間情報を取得および設(shè)定して、メソッドを設(shè)定でき、月は0から始まることに注意してください。 3.手動でのフォーマット日付には文字列が必要であり、サードパーティライブラリも使用できます。 4.ルクソンなどのタイムゾーンをサポートするライブラリを使用することをお勧めします。これらの重要なポイントを習(xí)得すると、一般的な間違いを効果的に回避できます。

なぜの下部にタグを配置する必要があるのですか? なぜの下部にタグを配置する必要があるのですか? Jul 02, 2025 am 01:22 AM

PLACSTHETTHETTHE BOTTOMOFABLOGPOSTORWEBPAGESERVESPAGESPORCICALPURPOSESESFORSEO、userexperience、andDesign.1.IthelpswithiobyAllowingseNStoAccessKeysword-relevanttagwithtagwithtagwithtagwithemaincontent.2.iTimrovesexperiencebyepingepintepepinedeeping

JavaScript vs. Java:開発者向けの包括的な比較 JavaScript vs. Java:開発者向けの包括的な比較 Jun 20, 2025 am 12:21 AM

javascriptispreferredforwebdevelopment、whilejavaisbetterforlge-scalebackendsystemsandroidapps.1)javascriptexcelsininintingtivewebexperiences withitsdynAmicnature anddommanipulation.2)javaofferstruntypyping-dobject-reientedpeatures

DOMでのイベントの泡立ちとキャプチャとは何ですか? DOMでのイベントの泡立ちとキャプチャとは何ですか? Jul 02, 2025 am 01:19 AM

イベントキャプチャとバブルは、DOMのイベント伝播の2つの段階です。キャプチャは最上層からターゲット要素までであり、バブルはターゲット要素から上層までです。 1.イベントキャプチャは、AddEventListenerのUseCaptureパラメーターをTrueに設(shè)定することにより実裝されます。 2。イベントバブルはデフォルトの動作であり、UseCaptureはfalseに設(shè)定されているか、省略されます。 3。イベントの伝播を使用して、イベントの伝播を防ぐことができます。 4.イベントバブルは、動的なコンテンツ処理効率を改善するためにイベント委任をサポートします。 5.キャプチャを使用して、ロギングやエラー処理など、事前にイベントを傍受できます。これらの2つのフェーズを理解することは、タイミングとJavaScriptがユーザー操作にどのように反応するかを正確に制御するのに役立ちます。

JavaScript:効率的なコーディングのためのデータ型の調(diào)査 JavaScript:効率的なコーディングのためのデータ型の調(diào)査 Jun 20, 2025 am 12:46 AM

javascripthassevenfundamentaldatypes:number、string、boolean、undefined、null、object、andsymbol.1)numberseadouble-precisionformat、有用であるため、有用性の高いものであるため、but-for-loating-pointarithmetic.2)ストリングリムムット、使用率が有用であること

JavaScriptアプリケーションのペイロードサイズをどのように削減できますか? JavaScriptアプリケーションのペイロードサイズをどのように削減できますか? Jun 26, 2025 am 12:54 AM

JavaScriptアプリケーションがゆっくりとロードされ、パフォーマンスが低い場合、問題はペイロードが大きすぎることです。ソリューションには、次のものが含まれます。1。コード分割(コードスプリッティング)を使用し、React.lazy()またはビルドツールを介して大きなバンドルを複數(shù)の小さなファイルに分割し、最初のダウンロードを減らすために必要に応じてロードします。 2。未使用のコード(Treeshaking)を削除し、ES6モジュールメカニズムを使用して「デッドコード」をクリアして、導(dǎo)入されたライブラリがこの機能をサポートしていることを確認(rèn)します。 3.リソースファイルを圧縮してマージし、GZIP/BrotliとTerserがJSを圧縮できるようにし、ファイルを合理的にマージし、靜的リソースを最適化します。 4.頑丈な依存関係を交換し、day.jsやフェッチなどの軽量ライブラリを選択します

JavaScriptモジュールの決定的なJSラウンドアップ:ESモジュールvs CommonJS JavaScriptモジュールの決定的なJSラウンドアップ:ESモジュールvs CommonJS Jul 02, 2025 am 01:28 AM

ESモジュールとCommonJSの主な違いは、ロード方法と使用シナリオです。 1.CommonJSは同期的にロードされ、node.jsサーバー側(cè)環(huán)境に適しています。 2.ESモジュールは、ブラウザなどのネットワーク環(huán)境に適した非同期にロードされています。 3。Syntax、ESモジュールはインポート/エクスポートを使用し、トップレベルのスコープに配置する必要がありますが、CommonJSは実行時に動的に呼ばれるrequire/Module.Exportsを使用します。 4.CommonJSは、Expressなどのnode.jsおよびLibrariesの古いバージョンで広く使用されていますが、ESモジュールは最新のフロントエンドフレームワークとnode.jsv14に適しています。 5.混合することはできますが、簡単に問題を引き起こす可能性があります。

See all articles