Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Livewireは魔法??コードリーディング してみた
Search
namizatork
November 25, 2020
Programming
1
310
Livewireは魔法??コードリーディング してみた
namizatork
November 25, 2020
Tweet
Share
More Decks by namizatork
See All by namizatork
PHPのエラーを理解して適切なエラーハンドリングを学ぼう
namizatork
1
3.5k
もう細かいレビューは したくない、されたくない
namizatork
0
1.3k
PHPの静的解析 ついでにLarastan
namizatork
0
520
Laravel8.xまでの大きな変更点を振り返る
namizatork
0
480
Laravelワカンネ(゚⊿゚)から「完全に理解した()」までステップアップ
namizatork
0
1k
Laravelの「Hello World」を 表示するまでの処理を追ってみた
namizatork
0
1.3k
Laravel Hands-on
namizatork
0
330
SPA/PWA/AMPってなに?
namizatork
1
17k
Other Decks in Programming
See All in Programming
オレを救った Cline を紹介する
codehex
15
14k
Rubyと自由とAIと
yotii23
6
1.9k
ABEMA iOS 大規模プロジェクトにおける段階的な技術刷新 / ABEMA iOS Technology Upgrade
akkyie
1
250
LINE messaging APIを使ってGoogleカレンダーと連携した予約ツールを作ってみた
takumakoike
0
130
iOSでQRコード生成奮闘記
ktcryomm
2
140
Jakarta EE meets AI
ivargrimstad
0
680
Boost Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
1.1k
AWS Step Functions は CDK で書こう!
konokenj
5
910
Domain-Driven Design (Tutorial)
hschwentner
13
22k
コミュニティ駆動 AWS CDK ライブラリ「Open Constructs Library」 / community-cdk-library
gotok365
2
260
もう少しテストを書きたいんじゃ〜 #phpstudy
o0h
PRO
21
4.4k
コードを読んで理解するko build
bells17
1
120
Featured
See All Featured
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
4
390
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.5k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.8k
What's in a price? How to price your products and services
michaelherold
244
12k
Git: the NoSQL Database
bkeepers
PRO
429
65k
Java REST API Framework Comparison - PWX 2021
mraible
29
8.4k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Transcript
Livewire は本当に魔法?? コードリーディングしてみた 弁護士ドットコム @namizatork
@namizatork ナミザト Profile 会社 年齢 出身 弁護士ドットコム株式会社 26歳 沖縄 すこ
お酒 一言 最近Reactハマってる
JavaScriptを書かずにPHPだけでSPAを実現することが出来るライブラリのこと 従来通りデータを受け取ったり、渡したりする為にはバックエンドへのAPI通信は必須だが、 その辺りを Livewire が”うまいこと”やってくれているので、開発者はAjax処理を意識せずに SPAが構築できる 今回はその”うまいこと”している箇所のコードを読み解いてみる Livewireとは
とはいえ実装方法の説明 ボタンを押すと数字がカウントするという簡 単なプログラムを作ってみる 普通ならJSを書いてAjax通信をしないとカウ ントアップはされないが、LivewireならPHPだ けで書けちゃう
View View部分(フロントだとコンポーネント的な) LivewireはBladeの記述で書く必要があり、 変数の出力方法なども基本的にはBladeの 記述方と同じだよ wire:click=”inc” はクリックした時にinc()メ ソッドを呼び出している
View(コンポーネント)の呼び出し これは普通のwelcome.blade.phpファイル (ちょいと違うけどまぁそういことにして) 先ほどのカウンターコンポーネントを <livewire:counter> で呼び出している
ロジック部分(Classファイル) これはLaravelでいうところのController的な 役目の箇所 関数を記述したり、Viewを指定して値を渡し たり、フロントからデータを受け取ったりする ことが出来る
いよいよ本題 まずはルーティングから 追ってくよ。 ※Jetstreamは省くよ。
ルーティングを確認
Livewireのサービスプロバイダを確認 Livewireのサービスプロバイダを確認すると 何やらboot()に登録している $this->RegisterRoutes() あたりがルートの指定っぽい
ルーティングファイルの場所 ここでルーティング指定してるっぽいですね 試しにlivewire/livewire.jsを覗いてみます
LivewireJavaScriptAssets 先ほどのルーティングであった LivewireJavaScriptAssets::class を覗いてみよう 何やらuse先のメソッドにJavaScriptファイル のパスを渡している...?
CanPretendToBeAFile 呼び出し元のメソッドを確認すると ファイルパスをJavaScriptとして吐いている つまり /livewire/livewire.js にアクセスすると ビルドされた /dist/livewire.js ファイルを表 示されるので、ここを叩けばLaravel側からア
クセスできそう
初期のルーティング設定は何となく理解 次はどうやってBladeにJSな しでAjax通信しているか見て いくよ
@livewireScripts JSの記述もないのにどうやってAjax通信を 行っているか調べる @livewireScripts という記述があやしい
再度Livewireのサービスプロバイダを確認 本来のBladeのディレクティブには @livewireJavascript なんてものはないのでどこかでカスタムディ レクティブしていると思われる Livewireのサービスプロバイダを確認すると それっぽい記述を発見 $this->registerBladeDirctives()
Bladeのカスタムディレクティブの内容を確認 やっぱりこのメソッド内でBladeのカスタアム ディレクティブを設定してました! 第一引数がBladeの @livewireScripts 第二引数が実際に実行したい処理 処理を確認すると別クラスのメソッド が呼ば れている...
カスタムディレクティブで実行される処理を確認 scripts()を覗くとどうやら別のメソッドから HTML構造を受け取っているので、 そのメソッドを見てみる (これが1メソッドだと....) これを吐き出してLivewireをレンダリングして いるっぽい
おわり 本当はもっと書きたかったけ ど 時間がありませんですた