Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JavaScript なしで動作するモダンなコードの書き方

azukiazusa
November 17, 2023

JavaScript なしで動作するモダンなコードの書き方

Next.js、Remix、SvelteKit といった近年のフレームワークは、JavaScript がなくても動作することを一つの価値として提供しています。

例えばSvelteKit のフォームではプログレッシブエンハンスメントとして、JavaScript が利用できる環境ではリッチなユーザー体験を提供しつつ、JavaScript が使えない環境においては HTML のフォームとして振る舞うことでアプリケーションの機能を変わらず提供できます。 React Server Component はサーバー側で HTML に変換されるため、クライアントに JavaScript のコードが配信されることはありません。React Server Component では useState() を使用できないといった制約がありますので、我々開発者は React Server Component の利点を十分に発揮するために、JavaScript を用いた状態管理を行う範囲を狭めることが求められています。

このトークでは、CSS の :has() セレクターや、Popover API といった、従来は JavaScript を用いなければ提供できなかった機能を代替する方法を紹介します。

azukiazusa

November 17, 2023
Tweet

More Decks by azukiazusa

Other Decks in Programming

Transcript

  1. Server Components がデフォルトとい うメンタルモデル • 従来はひとまず useState() から考えていた • useState()

    を使うには、"use client" を宣言するという ステップが追加される ◦ useState() を使うかわりにパフォーマンスの悪化を受 け入れますよ、という宣言のようなもの • 先に別の手段を取れないか?を考えるように
  2. :user-invalid 擬似クラス • :invalid 擬似クラスはページをロー ドした直後や入力中に評価されると いう問題がある ◦ 今までは JavaScript

    を使用し て任意のタイミングでフィード バックを返していた • :user-invalid はユーザーが操作した 後に検証される
  3. • <button type=”selectlist”> はリストボックスを開閉する要 素として振る舞う • <selectedoption> 要素には、 現在選択されているオプション のテキストを表示する

    • <option> 内に <img> 要素を 含めるなど、従来の <select> では不可能なパターンの実装も 可能 スロットで拡張する例
  4. Invokers JavaScript を使わずにインタラクションを追加する • <button> 要素に invoketarget 属性を指定する ◦ invoketarget

    の値は対象の要素の ID • invokeaction 属性でインタラクションの動作を指定できる
  5. 様々な要素が対象となる • popover:ポップオーバーの開閉 • <dialog>ダイアログの開閉 • <detail>:クロージャーの開閉 • <input type=”date”>,

    <input type=”file” >:ピッカーの表示(showPicker()) • <video>:再生、停止、ミュート • <audio>:再生、停止、ミュート • 任意の要素:fullscreen Invokers
  6. まとめ • フレームワークの機能を最大限発揮するために、 JavaScript に頼らないで機能を実現することが求められ ている • HTML や CSS

    の仕様は進化しつつあり、従来は JavaScript を使わなければ実現できなかった機能を置き 換えられるようになってきている