PHP 初心者が WordPress の プラグイン 作成 ! part33 ( ココナラの公開設定を調査 その3)
この記事では PHP 初心者 が WordPress プラグイン を 作成 します。 part33 ではココナラのフロントエンドで使用されているJavaScriptを調査してみます。
前回から通常のブラウザを使用して、ココナラの公開設定を調査しています。
PHP 初心者が WordPress の プラグイン 作成 ! part32 ( 通常のココナラの公開設定を調査 その2)
オブジェクトに直接代入しただけでは「入力した」と検知されないことがわかってきました。
さてどうしたものか。
フロントエンド
さらに調査を進めると、ココナラでは「Nuxt.js」と「Vue.js」というフロントエンドのフレームワークを使用していることがわかりました。
Nuxt.jsはサーバサイドレンダリング(SSR)のフレームワークのようなのでほおっておいて・・。
昨今Reactに次ぐ人気のVue.jsです。これでピンときました。
ここから推測
このフレームワークで使用されているメカニズムは「仮想DOM」です。
「公開設定」ボタンをクリックした際に値の参照先は「仮想DOM」らしいのです。
ヘッドレスブラウザからタイトルの部品に入力していたDOMはいわば「実際のDOM」でした。
ヘッドレスブラウザからの入力では「仮想DOM」には届かず(反応せず)クリックしても「タイトルを入力してください」と表示されていたようです。
仮想DOMに届け!
仮想DOMに届かないのは実際のDOM操作を「管理外」から操作してしまったためです。
では管理されている状態で変更することはできないのか。調べてみました。
JavaScript – [Vue]INPUTの内容が管理外で変更されたときデータに値を反映するには|teratail
同じように悩まれている方を発見。アンサーでは
DOMの直接操作が必要になる場合は、カスタムディレクティブを使用するのがVueでは一般的な方法だと思います。
と回答をもらっています。
以下、カスタムディレクティブの解説サイトです。
カスタムディレクティブ — Vue.js (vuejs.org)
・・・よくわかりませんでした(笑
なのでこちらの記事を読んでみました。
Vueで直接DOMノードを参照するプロパティを知ってアハ体験したのでまとめてみた – Qiita
$elや$refsというプロパティが重要なようです。
そうなのか・・・わけもわからず延々とコンソールをいじっていたらいきなりなんかできました!
__vue__って何・・・$elは?・・・謎すぎます。
まとめ
通常のブラウザを用いてココナラのNuxt.jsとVue.jsを調査しました。
わかったことは
- Vue.jsの管理外からDOMを操作しても仮想DOMに反映されない。
- いろんなサイトでは$elを使うと操作できると書いてありましたがなぜか__vue__プロパティを使うと操作できた。
ということです。次回は過程を少し解説して次に進めたらと思います。
今日はここまで!
ディスカッション
コメント一覧
まだ、コメントがありません