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
98
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Vue の Input における State は親で持つべきか子で持つべきか
t0yohei
December 20, 2024
More Decks by t0yohei
See All by t0yohei
Vue.js を使って Grid System を実装した話
t0yohei
2
7.9k
負債が溜まったレガシーフロントエンド画面を Vue.js でリプレイスした話
t0yohei
0
2.3k
プログラミング入門に失敗した話
t0yohei
0
240
【ITエンジニアが怪我で労災!?】 仕事中に足の小指が骨折したら起きること
t0yohei
0
460
Protocol Buffers で Web APIのスキーマ駆動開発がしたい
t0yohei
0
230
Ruby と JavaScript の違い( Function 編)
t0yohei
1
360
副業のノウハウ
t0yohei
0
220
ちょっとしたRubyの話
t0yohei
1
530
自作キーボード入門してみた
t0yohei
0
200
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
97
6.8k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.8k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.5k
We Are The Robots
honzajavorek
0
310
Darren the Foodie - Storyboard
khoart
PRO
3
3.7k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
280
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
430
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
sira's awesome portfolio website redesign presentation
elsirapls
0
340
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 派?関数渡し派?
階層が増えても実装が楽な関数渡し派
ご清聴ありがとうございました!