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
Vue の Input における State は親で持つべきか子で持つべきか
Search
t0yohei
December 20, 2024
0
62
Vue の Input における State は親で持つべきか子で持つべきか
t0yohei
December 20, 2024
Tweet
Share
More Decks by t0yohei
See All by t0yohei
Vue.js を使って Grid System を実装した話
t0yohei
2
7.4k
負債が溜まったレガシーフロントエンド画面を Vue.js でリプレイスした話
t0yohei
0
2.1k
プログラミング入門に失敗した話
t0yohei
0
200
【ITエンジニアが怪我で労災!?】 仕事中に足の小指が骨折したら起きること
t0yohei
0
430
Protocol Buffers で Web APIのスキーマ駆動開発がしたい
t0yohei
0
210
Ruby と JavaScript の違い( Function 編)
t0yohei
1
340
副業のノウハウ
t0yohei
0
200
ちょっとしたRubyの話
t0yohei
1
510
自作キーボード入門してみた
t0yohei
0
160
Featured
See All Featured
Color Theory Basics | Prateek | Gurzu
gurzu
0
170
[SF Ruby Conf 2025] Rails X
palkan
0
700
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
330
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
690
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
210
Heart Work Chapter 1 - Part 1
lfama
PRO
4
35k
Art, The Web, and Tiny UX
lynnandtonic
304
21k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
40
How to Talk to Developers About Accessibility
jct
1
94
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.1k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
100
Transcript
Vue の Input における State は親 で持つべきか子で持つべきか 2024/07/04 LT大会 by
t0yohei
自己紹介 • 名前: t0yohei • 最近の役割: デザインシステム関連の実装全般 • 好きな物: Ruby、Vue.js、コーヒー、アニメ
はじめに
超フロントエンド実装寄りの話です (ごめんなさい ) - 他のネタ思いつきませんでした... - 「かような話もあるんどすなぁ」くらいの心持ちで聞いて頂ければ - 間違ったことを言っていたら、優しく指摘ください!
🙅🪓
本題
Vue.js の状態管理にまつわる話です
Vue.js の状態管理の肝は、 更新可能な reactive state を どこで管理するかです!
Vue.js の状態管理の肝は、 更新可能なリアクティブな状態を どこで管理するかです!
用語整理: reactive な state(リアクティブな状態 ) - Vue.js で言うと ref(), reactive()
関数で初期化される変数 - reactive な state - const hoge = ref(‘hoge’) - reactive じゃない値 - const fuga = ‘fuga’ - let piyo = ‘piyo’ - 単に state と言う場合は、この reactive な stateを刺すことが多い(多分) - この発表でも、以後 state といった場合は reactive な state を指します
reactive state は更新可能 - .value をつけることで更新可能 - const hoge =
ref(‘hoge’) - hoge.value = ‘foo’
reactive な state が更新されると、関連する DOM も更新される
Vue.js の状態管理の肝は、 更新可能な reactive state を どこで管理するかです!
Vue の Input における State は親 で持つべきか子で持つべきか 2024/07/04 LT大会 by
t0yohei
Vue の Input
親が子の状態に関与しない場合は、 さっきみたく子に state を持たせたらいい
ただこの実装だと、親から 子の状態を取得するのがちょい大変
バックエンドの API にデータを送る時とか、 親で子のデータを使いたい
ref 属性と defineExpose を使うパターン
ref と defineExpose を使うパターン メリット state は子で持っている 1 つだけなの で管理はしやすい
デメリット 親・子・孫と階層が深くなってくると、 末端の state 取得が大変
親でもStateを持って、子の更新を監視するパターン
親でもStateを持って、子の更新を監視するパターン メリット 親の state が子の state と同期してい るので、親での子の state 取得が簡
単(と言うか不要) デメリット 親・子・孫と階層が深くなってくなるご とに、 state が増えてしまい管理が大 変 (子だけ別の値になっちゃうとか...)
子に state を持たせないようにする (親だけに state を持たせる ) にはどうするか
子は親から渡ってきた値の表示と、 値の変更を親に通知するだけにする
子に state を持たせないパターン
emit を使ったバージョン
子に State を持たせないパターン メリット - State は 1 つなので状態管理が 楽
- 親で State を管理しているので、 子の state 取得が簡単(と言うか 不要) デメリット 実際の入力値を後から親の State で 上書きする形なので、上書きに失敗 すると DOM の値と親の State が別 値になってしまう危険性がある
デメリットの詳細
とはいえメリットが大きいので、 現状親に State を持たせるパターン推し
他に何か良い方法があれば 教えてください!
番外編
Emit 派?関数渡し派?
階層が増えても実装が楽な関数渡し派
ご清聴ありがとうございました!