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
11
Vue の Input における State は親で持つべきか子で持つべきか
t0yohei
December 20, 2024
Tweet
Share
More Decks by t0yohei
See All by t0yohei
Vue.js を使って Grid System を実装した話
t0yohei
2
6.8k
負債が溜まったレガシーフロントエンド画面を Vue.js でリプレイスした話
t0yohei
0
1.9k
プログラミング入門に失敗した話
t0yohei
0
160
【ITエンジニアが怪我で労災!?】 仕事中に足の小指が骨折したら起きること
t0yohei
0
350
Protocol Buffers で Web APIのスキーマ駆動開発がしたい
t0yohei
0
170
Ruby と JavaScript の違い( Function 編)
t0yohei
1
290
副業のノウハウ
t0yohei
0
180
ちょっとしたRubyの話
t0yohei
1
450
自作キーボード入門してみた
t0yohei
0
120
Featured
See All Featured
The Pragmatic Product Professional
lauravandoore
32
6.4k
Agile that works and the tools we love
rasmusluckow
328
21k
Designing for humans not robots
tammielis
250
25k
A better future with KSS
kneath
238
17k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.5k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7.1k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.3k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.2k
Music & Morning Musume
bryan
46
6.4k
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.2k
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 派?関数渡し派?
階層が増えても実装が楽な関数渡し派
ご清聴ありがとうございました!