Submit Search
Upload
Svelte5でのevent受け渡し in Svelte Japan Offline Meetup #2
•
0 likes
•
83 views
T
ttakapi0327
Follow
Svelte Japan Offline Meetup #2 での発表資料です。 Svelte5でのコンポーネント間イベント受け渡しに関して説明しています。
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 43
Download now
Download to read offline
Recommended
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
増田 亨
WPF MVVM Review
WPF MVVM Review
Takayuki Kondou
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
Tokoroten Nakayama
データ分析を支える技術 DWH再入門
データ分析を支える技術 DWH再入門
Satoru Ishikawa
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
AWS re:Invent 2021 コスト削減に役立つアップデートまとめ
AWS re:Invent 2021 コスト削減に役立つアップデートまとめ
Serverworks Co.,Ltd.
Cognito、Azure ADと仲良くしてみた
Cognito、Azure ADと仲良くしてみた
Takafumi Kondo
Snowflake Architecture and Performance
Snowflake Architecture and Performance
Mineaki Motohashi
Recommended
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
増田 亨
WPF MVVM Review
WPF MVVM Review
Takayuki Kondou
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
Tokoroten Nakayama
データ分析を支える技術 DWH再入門
データ分析を支える技術 DWH再入門
Satoru Ishikawa
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
AWS re:Invent 2021 コスト削減に役立つアップデートまとめ
AWS re:Invent 2021 コスト削減に役立つアップデートまとめ
Serverworks Co.,Ltd.
Cognito、Azure ADと仲良くしてみた
Cognito、Azure ADと仲良くしてみた
Takafumi Kondo
Snowflake Architecture and Performance
Snowflake Architecture and Performance
Mineaki Motohashi
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
Tadahiro Ishisaka
脆弱性ハンドリングと耐える設計 -Vulnerability Response-
脆弱性ハンドリングと耐える設計 -Vulnerability Response-
Tomohiro Nakashima
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
Satoshi Nagayasu
2019.10.24 EC-CUBE関西UG 2系から4系への移行方法
2019.10.24 EC-CUBE関西UG 2系から4系への移行方法
Chihiro Adachi
Amazon S3による静的Webサイトホスティング
Amazon S3による静的Webサイトホスティング
Yasuhiro Horiuchi
WordPressのCDN化
WordPressのCDN化
J-Stream Inc.
Tackling Complexity
Tackling Complexity
Yoshitaka Kawashima
イベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
失敗から学ぶデータ分析グループのチームマネジメント変遷 (デブサミ2016) #devsumi
失敗から学ぶデータ分析グループのチームマネジメント変遷 (デブサミ2016) #devsumi
Tokoroten Nakayama
リクルートのWebサービスを支える共通インフラ「RAFTEL」
リクルートのWebサービスを支える共通インフラ「RAFTEL」
Recruit Technologies
ネットワークが切れても大丈夫!リアルタイムWebアプリケーションを簡単開発するフレームワーク Winter Cardinalのご紹介
ネットワークが切れても大丈夫!リアルタイムWebアプリケーションを簡単開発するフレームワーク Winter Cardinalのご紹介
NobuyasuNakajima2
smarthrを支えるインフラ
smarthrを支えるインフラ
tei-k
Amazon SageMakerでscikit-learnで作ったモデルのEndpoint作成
Amazon SageMakerでscikit-learnで作ったモデルのEndpoint作成
西岡 賢一郎
"Simple Made Easy" Made Easy
"Simple Made Easy" Made Easy
Kent Ohashi
ReactとSeleniumの幸せな関係
ReactとSeleniumの幸せな関係
Akira Kuratani
NTT研究所におけるYammerの取り組みと、社内Twitterの統計解析
NTT研究所におけるYammerの取り組みと、社内Twitterの統計解析
Tokoroten Nakayama
失敗から学ぶデータ分析グループのチームマネジメント変遷
失敗から学ぶデータ分析グループのチームマネジメント変遷
Tokoroten Nakayama
Cassandra導入事例と現場視点での苦労したポイント cassandra summit2014jpn
Cassandra導入事例と現場視点での苦労したポイント cassandra summit2014jpn
haketa
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
Koichiro Matsuoka
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
増田 亨
式の体を成して無い式を式の体を成すように式と式木で何とかする式
式の体を成して無い式を式の体を成すように式と式木で何とかする式
Kouji Matsui
実戦Scala
実戦Scala
Yuto Suzuki
More Related Content
What's hot
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
Tadahiro Ishisaka
脆弱性ハンドリングと耐える設計 -Vulnerability Response-
脆弱性ハンドリングと耐える設計 -Vulnerability Response-
Tomohiro Nakashima
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
Satoshi Nagayasu
2019.10.24 EC-CUBE関西UG 2系から4系への移行方法
2019.10.24 EC-CUBE関西UG 2系から4系への移行方法
Chihiro Adachi
Amazon S3による静的Webサイトホスティング
Amazon S3による静的Webサイトホスティング
Yasuhiro Horiuchi
WordPressのCDN化
WordPressのCDN化
J-Stream Inc.
Tackling Complexity
Tackling Complexity
Yoshitaka Kawashima
イベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
失敗から学ぶデータ分析グループのチームマネジメント変遷 (デブサミ2016) #devsumi
失敗から学ぶデータ分析グループのチームマネジメント変遷 (デブサミ2016) #devsumi
Tokoroten Nakayama
リクルートのWebサービスを支える共通インフラ「RAFTEL」
リクルートのWebサービスを支える共通インフラ「RAFTEL」
Recruit Technologies
ネットワークが切れても大丈夫!リアルタイムWebアプリケーションを簡単開発するフレームワーク Winter Cardinalのご紹介
ネットワークが切れても大丈夫!リアルタイムWebアプリケーションを簡単開発するフレームワーク Winter Cardinalのご紹介
NobuyasuNakajima2
smarthrを支えるインフラ
smarthrを支えるインフラ
tei-k
Amazon SageMakerでscikit-learnで作ったモデルのEndpoint作成
Amazon SageMakerでscikit-learnで作ったモデルのEndpoint作成
西岡 賢一郎
"Simple Made Easy" Made Easy
"Simple Made Easy" Made Easy
Kent Ohashi
ReactとSeleniumの幸せな関係
ReactとSeleniumの幸せな関係
Akira Kuratani
NTT研究所におけるYammerの取り組みと、社内Twitterの統計解析
NTT研究所におけるYammerの取り組みと、社内Twitterの統計解析
Tokoroten Nakayama
失敗から学ぶデータ分析グループのチームマネジメント変遷
失敗から学ぶデータ分析グループのチームマネジメント変遷
Tokoroten Nakayama
Cassandra導入事例と現場視点での苦労したポイント cassandra summit2014jpn
Cassandra導入事例と現場視点での苦労したポイント cassandra summit2014jpn
haketa
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
Koichiro Matsuoka
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
増田 亨
What's hot
(20)
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
脆弱性ハンドリングと耐える設計 -Vulnerability Response-
脆弱性ハンドリングと耐える設計 -Vulnerability Response-
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
2019.10.24 EC-CUBE関西UG 2系から4系への移行方法
2019.10.24 EC-CUBE関西UG 2系から4系への移行方法
Amazon S3による静的Webサイトホスティング
Amazon S3による静的Webサイトホスティング
WordPressのCDN化
WordPressのCDN化
Tackling Complexity
Tackling Complexity
イベント・ソーシングを知る
イベント・ソーシングを知る
失敗から学ぶデータ分析グループのチームマネジメント変遷 (デブサミ2016) #devsumi
失敗から学ぶデータ分析グループのチームマネジメント変遷 (デブサミ2016) #devsumi
リクルートのWebサービスを支える共通インフラ「RAFTEL」
リクルートのWebサービスを支える共通インフラ「RAFTEL」
ネットワークが切れても大丈夫!リアルタイムWebアプリケーションを簡単開発するフレームワーク Winter Cardinalのご紹介
ネットワークが切れても大丈夫!リアルタイムWebアプリケーションを簡単開発するフレームワーク Winter Cardinalのご紹介
smarthrを支えるインフラ
smarthrを支えるインフラ
Amazon SageMakerでscikit-learnで作ったモデルのEndpoint作成
Amazon SageMakerでscikit-learnで作ったモデルのEndpoint作成
"Simple Made Easy" Made Easy
"Simple Made Easy" Made Easy
ReactとSeleniumの幸せな関係
ReactとSeleniumの幸せな関係
NTT研究所におけるYammerの取り組みと、社内Twitterの統計解析
NTT研究所におけるYammerの取り組みと、社内Twitterの統計解析
失敗から学ぶデータ分析グループのチームマネジメント変遷
失敗から学ぶデータ分析グループのチームマネジメント変遷
Cassandra導入事例と現場視点での苦労したポイント cassandra summit2014jpn
Cassandra導入事例と現場視点での苦労したポイント cassandra summit2014jpn
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
Similar to Svelte5でのevent受け渡し in Svelte Japan Offline Meetup #2
式の体を成して無い式を式の体を成すように式と式木で何とかする式
式の体を成して無い式を式の体を成すように式と式木で何とかする式
Kouji Matsui
実戦Scala
実戦Scala
Yuto Suzuki
Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -
Kota Mizushima
PyconJP2017 Kivyによるアプリケーション開発のすすめ
PyconJP2017 Kivyによるアプリケーション開発のすすめ
Jun Okazaki
メルカリにおける自動化への取り組み (automation-night2 LT)
メルカリにおける自動化への取り組み (automation-night2 LT)
Kat 0gm
Nervesが開拓する「ElixirでIoT」の新世界
Nervesが開拓する「ElixirでIoT」の新世界
Hideki Takase
社内LT大会#3 2016-4-28 Vuls
社内LT大会#3 2016-4-28 Vuls
Kota Kanbe
Open modeler
Open modeler
Yoshiki Izumi
スッとGoを取り入れる
スッとGoを取り入れる
Yusuke Wada
PythonのGUI_2018 with NSEG
PythonのGUI_2018 with NSEG
Jun Okazaki
第1回 【初心者向け】Unity+Oculus Riftで次世代の3Dゲームを作って感じるワークショップ
第1回 【初心者向け】Unity+Oculus Riftで次世代の3Dゲームを作って感じるワークショップ
Yuichi Ishii
受託開発とRubyGems
受託開発とRubyGems
Koichi ITO
皆さん!ふくてんが来ましたよ!!
皆さん!ふくてんが来ましたよ!!
ru pic
PlayFramework1.x基礎編
PlayFramework1.x基礎編
Asami Abe
Bicep 入門 MySQL編
Bicep 入門 MySQL編
Takekazu Omi
第2回 -Play部屋- Play 2.0はじめて&もくもく会
第2回 -Play部屋- Play 2.0はじめて&もくもく会
Kazuhiro Hara
LibreOfficeをWindows上でビルドする
LibreOfficeをWindows上でビルドする
Tomofumi Yagi
Swift : クラス継承とプロトコル拡張を比べてみる #yidev
Swift : クラス継承とプロトコル拡張を比べてみる #yidev
Tomohiro Kumagai
SphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまで
SphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまで
Study Group by SciencePark Corp.
React Nativeの話のその前に… サービスの作り方の話
React Nativeの話のその前に… サービスの作り方の話
Kanako Kobayashi
Similar to Svelte5でのevent受け渡し in Svelte Japan Offline Meetup #2
(20)
式の体を成して無い式を式の体を成すように式と式木で何とかする式
式の体を成して無い式を式の体を成すように式と式木で何とかする式
実戦Scala
実戦Scala
Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -
PyconJP2017 Kivyによるアプリケーション開発のすすめ
PyconJP2017 Kivyによるアプリケーション開発のすすめ
メルカリにおける自動化への取り組み (automation-night2 LT)
メルカリにおける自動化への取り組み (automation-night2 LT)
Nervesが開拓する「ElixirでIoT」の新世界
Nervesが開拓する「ElixirでIoT」の新世界
社内LT大会#3 2016-4-28 Vuls
社内LT大会#3 2016-4-28 Vuls
Open modeler
Open modeler
スッとGoを取り入れる
スッとGoを取り入れる
PythonのGUI_2018 with NSEG
PythonのGUI_2018 with NSEG
第1回 【初心者向け】Unity+Oculus Riftで次世代の3Dゲームを作って感じるワークショップ
第1回 【初心者向け】Unity+Oculus Riftで次世代の3Dゲームを作って感じるワークショップ
受託開発とRubyGems
受託開発とRubyGems
皆さん!ふくてんが来ましたよ!!
皆さん!ふくてんが来ましたよ!!
PlayFramework1.x基礎編
PlayFramework1.x基礎編
Bicep 入門 MySQL編
Bicep 入門 MySQL編
第2回 -Play部屋- Play 2.0はじめて&もくもく会
第2回 -Play部屋- Play 2.0はじめて&もくもく会
LibreOfficeをWindows上でビルドする
LibreOfficeをWindows上でビルドする
Swift : クラス継承とプロトコル拡張を比べてみる #yidev
Swift : クラス継承とプロトコル拡張を比べてみる #yidev
SphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまで
SphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまで
React Nativeの話のその前に… サービスの作り方の話
React Nativeの話のその前に… サービスの作り方の話
Svelte5でのevent受け渡し in Svelte Japan Offline Meetup #2
1.
Svelte5でのevent受け渡し SvelteJapanOfflineMeetup#2 2024/02/21(水) 株式会社Nextbeat 富永孝彦
2.
自己紹介 名前:富永孝彦(とみながたかひこ) X:@takapi327 Github:https://github.com/takapi327 所属:株式会社Nextbeat 趣味 ScalaでOSS開発やコントリビュート、OSSのコード読む プログラミングに関する情報収集 ゲーム
3.
今日話すこと 1.Svelte3,4でのevent受け渡し 2.Svelte5ではどう変わるのか
4.
なぜこの議題か? Svelte3,4を使用したUIライブラリを開発しており、それが割としんどかった
5.
何がしんどい? UIライブラリは汎用的に作る必要がある 汎用的に作るにはイベント受け渡しをライブラリ側で頑張る必要がある 頑張ると実装コスト、レビューコストが上がってしまう 使ってた機能がSvelte4で非推奨になってしまった
6.
Svelte5 Svelte4で非推奨になってた機能とかがなくなってしまった。 ただ更新しないわけにはいかないので、Svete5の機能で作り直してみる。
7.
あれ、めっちゃ楽じゃね?
8.
まずは、Svelte3,4のイベント受け渡しはどのようなものだったか
9.
Svelte3,4でのevent受け渡し Svelte3,4では on: ディレクティブを使用してイベントリスナーを要素にアタッチしていまし た <button
on:click={...}> クリック </button>
10.
共通で使用するコンポーネントを作成する場合、 子から親にイベントを伝搬する必要があります。 Svelte3,4では createEventDispatcher などを使用してイベントを伝搬していました。
11.
1. createEventDispatcher で
dispatch を作成 2.イベントハンドラに渡す関数を作成 3.関数内で dispatch に伝搬したいイベント名と受け渡したい値を渡す 4.関数を使用したいイベントハンドラに渡す // Button.svelte <script lang="ts"> import { createEventDispatcher } from 'svelte' const dispatch = createEventDispatcher() function sayHello() { dispatch('click', { text: 'こんにちは!' }) } </script> <button on:click={sayHello}> クリック </button>
12.
親コンポーネントでは、子コンポーネントの dispatch に渡されたイベント名を使用できる ので、そのイベントハンドラに関数を渡して
dispatch 経由で渡された値を使用するという 使い方になるかと思います。 // App.svelte <script lang="ts"> import Button from '../lib/component/Button.svelte' function handleMessage(event) { alert(event.detail.text) } </script> <Button on:click={handleMessage}/> Playground
13.
もしくは、関数を渡すという方法を使用することもできます。 // Button.svelte <script lang="ts"> export
let sayHello: (text: string) => void </script> <button on:click={() => sayHello('こんにちは!')}> クリック </button> // App.svelte <script lang="ts"> import Button from '../lib/component/Button.svelte' function sayHello(text: string) { alert(text) } </script> <Button {sayHello} /> Playground
14.
もしくは on: ディレクティブに値を渡さず、イベントを転送してもらって親コンポーネント でイベントをリッスンするという方法もあります。 //
Button.svelte <button on:click> クリック </button> // App.svelte <script lang="ts"> import Button from './Button.svelte' function handleMessage(event) { alert('こんにちは!') } </script> <Button on:click={handleMessage}/> Playground
15.
運用が大変? 使用したいイベントは全て記載しなければいけない だたユーザーがどのように使うかはわからないから制限するか全部を有効にする必 要もあったり コンポーネントが大きくなってくるとイベントのforwardやdispatchなどの処理が複雑に なってしまう プロダクトで共通コンポーネントを作成する際などで、デザインなどは同じなのにフォ ーム送信用のボタン、画面遷移用のボタン、モーダル表示用のボタンという風に用途ご とにコンポーネントが生まれてしまう可能性がある 条件判定用のフラグを用意して、スーパーコンポーネントを作成すると無闇に改修でき なくなってしまうなんてことも...
16.
汎用的に作るために UIライブラリは汎用的に作りたいので、 dispatch や特定の関数で作成したイベントしか使 用できないものになってしまうような実装はなるべく避けたい ライブラリが頑張って柔軟に対応できるように作らなければならない
17.
じゃあどうするの?
18.
svelte-material-uiなどのライブラリでは、これを解消するために SvelteComponent の
$on をラップして、イベントをいい感じに受け渡せるようにするための処理が複数作られている forwardEventsBuilder useActions etc...
19.
こんな感じで SvelteComponent の
$on 関数をオーバーライドして、すべてのバインドされ たイベントを転送しています。 export function forwardEventsBuilder(component: SvelteComponent) { ... component.$on = (fullEventType: string, callback: (event: any) => void) => {...} ... } 弊社のライブラリも同じように作成を行なっていました。
20.
Svelteの内部構造を理解しておかないといけないので大変... Svelteは簡単に書けるはずなのに難しくなってしまった...
21.
Svelte5では? まず、Svelte5ではイベントハンドラを渡すときは on: ディレクティブを使用するのではな く、
onxxx を使用するように変更になりました。
22.
なぜ変更? 「イベントハンドラとpropsを区別するアプローチを取っていたが、それが原因でコンポーネ ントをまたぐイベントのforwardやpropagate、dispatchやdelegationが複雑になってしまっ た。」[3] というのが変更した理由のようです。 以下詳細についてはSvelteSummitFall2023で解説がされていますので、こちらをご覧いた だければと思います。 https://www.youtube.com/live/pTgIx-ucMsY?si=PZrN6ZKczM-_j8bj&t=14096
23.
注意 Svelte5は本日(2024/02/21)時点ではまだ正規リリースされていません。 今回ご紹介する機能や実装方法は今後変更される可能性があります。
24.
Svelte5では$props機能が追加 Svelte5から追加された $props とは、
export let の代わりとして使用することができる機 能です。 今までSvelte3,4で使用されていた、 $$props や $$restProps といった機能の代わりとなる ものです。
25.
Svelte3,4 Playground // Button.svelte <script lang="ts"> export
let label: string export let type: string </script> <button type={type}> {label} </button> // App.svelte <script lang="ts"> import Button from './Button.svelte' </script> <Button label="クリック" type="submit" />
26.
Svelte5 Playground <script lang="ts"> let {
label, type } = $props() </script> <button type={type}> {label} </button> // App.svelte <script lang="ts"> import Button from './Button.svelte' </script> <Button label="クリック" type="submit" />
27.
より簡潔に値を受け渡せるようになりましたね!
28.
$propsを使用すればイベントハンドラも渡せる 今までは単純な値か自身で作成した関数しか受け取ることはできませんでした。 しかし、 $props を使用すれば先ほど単純な値を受け渡したような感じで、イベントハンド ラも渡すことができるようになります。 //
Button.svelte <script lang="ts"> let { onclick } = $props() </script> <button onclick={() => onclick({ text: 'こんにちは!' })}> クリック </button>
29.
親コンポーネントでは、子コンポーネントに直接イベントハンドラを設定するように使用す ることができます。 Playground // +page.svelte <script lang="ts"> import
Button from '../lib/component/Button.svelte' function handleMessage(event) { alert(event.text) } </script> <Button onclick={handleMessage}/>
30.
何が嬉しい? イベントハンドラごとに dispatch や関数を用意する必要がなくなった 予めイベントを設定しておく必要もない 自身でイベントハンドラを使用したい場合も簡単になった
31.
ここが良い イベントハンドラごとに dispatch や関数を用意する必要がなくなった Q.今もイベントハンドラを指定しているから3,4の時とあまり変わらないのでは? A.イベントハンドラは指定する必要はない。コンポーネント内で使いたいものだけ指定すれ ば良い
32.
どういうこと? $props は $$prosp
や $$restProps 機能の代わりとなるものと言いました。 つまり、受け取る引数を指定するだけでなく、渡された値を全て受け取るという風に書くこ とも可能ということです。 以下のようにスプレッド構文(SpreadSyntax)を使用すれば Button コンポーネントに渡され た値を全て button に渡すことができます。 // Button.svelte <script lang="ts"> let { ...restProps } = $props() </script> <button {...restProps}> クリック </button>
33.
子コンポーネントでは、スプレッド構文によって受け取った値を全て渡すようにしました。 イベントハンドラに対して何も処理を記載していないはずですが、親コンポーネントでは以 下のようにイベントを自由に使用可能です。 Playground <script lang="ts"> import Button
from '../lib/component/Button.svelte' function onmouseover(event) { console.log('マウスが乗った!') } function onmouseout(event) { alert('マウスが離れた') } </script> <Button {onmouseover} {onmouseout} />
34.
Svelte5 用途ごとにコンポーネントを用意する必要も条件分岐を使ったスーパーコンポーネントを作 成する必要もない! イベントをそのまま渡すことが可能かつ、コンポーネント内で使いたいイベントがあれば自 由に使える Selte3,4の時みたいにSvelteComponentの $on をゴニョゴニョする必要がなくなった ※
SvelteComponentの $on はSvelte5でなくなった
35.
つまり 実装コストは下がったのに自由度は上がった! より柔軟なコンポーネントを作成可能に!
36.
しんどかったものが UIライブラリは汎用的に作る必要がある =>標準機能だけで実現可能に! 汎用的に作るにはイベント受け渡しをライブラリ側で頑張る必要がある =>何も頑張ってない! 頑張ると実装コスト、レビューコストが上がってしまう =>標準機能だから敷居はほとんどなくなった! 使ってた機能がSvelte4で非推奨になってしまった =>むしろいらない!
37.
うん、めっちゃ楽!
38.
触ってみて 最初はSvelte5で内部のAPIを使用できなくなったり(Svelte4で非推奨)、いろいろな機能が変 わるので大変そうとか複雑なりそうと思っていました。 しかし、実際に触ってみるとむしろ開発は楽になった印象です。 学習コストも少なくなって、今までの処理がより簡単に書けるようになったと思います。 Svelte3,4で書かれたUIライブラリも改修するのは大変だと思いますが、Svelte5の新機能を 使えば標準の機能だけでほとんどのことが解決できると思います! つまり、Svelteが書ければ誰でも保守できるライブラリになることも可能!? (むしろライブラリなどいらないのでは?)
39.
他にもいろんな新機能が! $state $derived $effect $effect.pre $effect.active $effect.root $inspect Snippets 早く正式版を使いたいので、リリースが楽しみですね!
40.
Svelte5UIライブラリ 以下でSvelte5の新機能を使ってHeadlessUIライブラリを趣味で開発しています。 (まだDialogしかないけどw) 新機能の使い方の参考にしていただければ! また、もっとこうした使い方の方がいいよなどあれば教えていただけると嬉しいです! https://github.com/takapi327/svelte-headlessui
41.
Nextbeatでは Svelte,SvelteKitを採用しており、現在3つ目のプロジェクトを技術移行中です! こんな感じでSvelteの採用や新バージョンへの追従を積極的に行なっています。 興味がありましたら会社資料説明を見ていただけると嬉しいです。
42.
参考文献 1.https://qiita.com/sho_U/items/2d52590bd7973fbec671 2.https://qiita.com/oekazuma/items/ab617096af10ad94356e 3.https://zenn.dev/tomoam/scraps/375fb71c09fe0f 4.https://www.youtube.com/watch?v=pTgIx-ucMsY 5.https://svelte.jp/blog/runes
43.
ご清聴ありがとうございました!
Download now