Closed3
Qwikのお試し
Qwikが面白そうなのでStarterでお試しメモ。
npm init qwik
starter+expressの構成をお試し。Windowsで試したところエラーが出たのでWSLを使う。qwikのバージョンは0.0.18-1
Client側
先にClient側のコードを見ていく。
npm run dev
htmlには2つのscript要素がある。
qwik/src/qwikloader.ts
- Serializeされたprivate state(
<script type="qwik/json">
)
qwikloader.ts
イベントリスナーを設定する。イベントが発火したときに遅延読み込みするURLを探し、インポートする。
-
window.BuildEvents
がtrue
のときはwindow.qEvents
にあるイベント - script要素のevent属性の値にあるイベント
-
document
のプロパティのうちonから始まるもの
の上からどれかのイベントにリスナーをdocument
へセットする。
イベントが発火した際はon:eventname属性のQRLからイベントハンドラーをインポートして実行する。また、document.__q_context__
に要素・イベント・URLをセットする。document
のみで発火するイベントはon:eventname属性でquerySelectorAll
してそれぞれイベントハンドラーを呼ぶ。
今回インタラクティブなのは以下のinput要素のみ
<input q:obj="1" value="World" on:keyup="/src/h_main_main_onrender_input_onkeyup.js#Main_onRender_input_onkeyup[0]">
h_main_app_onrender_input_onkeyup.js
import * as qwik from "/node_modules/.vite/@builder_io_qwik.js?v=c1adecb2";
import { useEvent } from "/node_modules/.vite/@builder_io_qwik.js?v=c1adecb2";
export const App_onRender_input_onkeyup = ()=>{
const [state] = qwik.useLexicalScope(); //--(1)
const event = useEvent(); //--(2)
const input = event.target;
state.name = input.value; //--(3)
};
元のコードから(1)が追加されている。
useLexicalScope
-
getInvokeContext
を呼び出し先ほどの__q_context__
からInvokeContext
を作る - URLからQRLを作る
- イベントターゲットのon:q-render属性を持った祖先要素を引数に
getProps
を呼び出す- stateをdeserializeし、
readWriteProxy
でラップしてhydrateする - q:obj属性を持つ要素それぞれに
newQProps
を呼びQPropsを作成、対応するキーのstateを__qRefs__
にセット
- stateをdeserializeし、
- イベントターゲットのon:q-render属性を持った祖先要素のQPropsから値を取り出す
このスクラップは1日前にクローズされました