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
何でもかんでもStoreにぶち込まないで実装をする話 with Vuex
Search
slont
May 20, 2020
Programming
1.5k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
何でもかんでもStoreにぶち込まないで実装をする話 with Vuex
slont
May 20, 2020
More Decks by slont
See All by slont
SaaS型保険クラウド「Inspire」関連サービス全てをVue.jsで作ってる話
slont
1
1.1k
ぼくのかんがえたさいきょうのVueあーきてくちゃ
slont
9
4k
Other Decks in Programming
See All in Programming
Foundation Models frameworkで画像分析
ryodeveloper
1
600
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
160
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
550
yield再入門 #phpcon
o0h
PRO
0
980
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
0
1.7k
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
4
380
夏だ!祭りだ!祭りとはドメインモデリングでは?
ryugen04
0
190
【QA Test Talk Vol.8】AI-DLC による Whole Team Approach の加速
pkshadeck
PRO
0
120
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_tuning_101
hanhan1978
4
1.7k
20260722_microCMSで考える、AI時代のコンテンツ運用設計
yosh1
0
370
VibeCodingからAgenticWorkflowへ
starfish719
0
320
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
540
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
135
10k
Accessibility Awareness
sabderemane
1
170
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
610
Fireside Chat
paigeccino
42
4k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
200
We Are The Robots
honzajavorek
0
290
How GitHub (no longer) Works
holman
316
150k
The Cost Of JavaScript in 2023
addyosmani
55
10k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
30 Presentation Tips
portentint
PRO
1
360
Transcript
ԿͰ͔ΜͰStoreʹͿͪࠐ· ͳ͍Ͱ࣮Λ͢Δ with Vuex 2020.05.20@PWA Night vol.16
About me • Twitter - @_slont • גࣜձࣾFinatext - Engineer
• Vue.js, Java, Go, Elixir • ࣗ࡞PWA Paroty
https://medium.com/finatext/composition-api-for-vue3-63631dbadcef https://medium.com/finatext/vue-on-ionic%E3%81%A7web
ίτͷൃ
None
શͯStoreͰཧ…ʁ ͍͔ͭഁ͢Δ͜ͱʹݟ͑Δʂʢʁʣ
VuexΛ༻͍ͨ StoreύλʔϯͰͷ࣮Λߟ͑Δ
Vuexͱ • ঢ়ଶཧύλʔϯ + ϥΠϒϥϦ → Flux, ReduxͷྲྀΕΛΉ → αʔυύʔςΟͰӬଓԽՄೳ
• Vueίϯϙʔωϯτ͔Β$storeܦ༝ͰΞΫηεՄೳ → ͜Εάϩʔόϧมͱͯ͠ͷੑ࣭Λ࣋ͭͷͰɺศٓతʹͦ͏ݺͿ ɹ→ ʮάϩʔόϧม͡Όͳ͍ͩΖ͏͕ʂʯͱ͔ݴΘΕ·͕ͨ͠ɺఆٛͰͳ͘ৼΔ͍ͷͳͷͰແࢹ
άϩʔόϧม͕ ԿނΞϯνύλʔͳͷ͔
None
StoreͰͬͪΌ͏ਓͷࢥߟʢໝʣ • ʮάϩʔόϧͬͯதͰείʔϓΛͬͯΔ͔Βେৎʯ → ͋ΔίϯϙʔωϯτείʔϓͰด͡Δ͜ͱ͕Ͱ͖ΔมΛάϩʔόϧʹग़ͯ͠Δ࣌Ͱʢґଘ͕ؔʣີͰ͢ → είʔϓͷωʔϜεϖʔε͕িಥͨ͠ΒऴΘΔ • ʮ݁ہAPIͱ͔άϩʔόϧͳͷͰ·ͱΊͨํ͕ྑ͍ʯ →
ेݸҎ্ͷAPIΛ͏େنͳΞϓϦͩͱstore͕େʹͳͬͯഁ͢Δ → ࢲݟ͕ͩɺstoreͱ͍͏໊લΛ༻ͯ͠͠·ͬͨͷ͕ྑ͘ͳ͔ͬͨ • ʮείʔϓҙࣝ͠ͳͯ͘ྑ͍ͷͰศརʯ → ؒҧ͍ͳ͍ → େنΞϓϦ͡Όͳ͍͔Βʮͨ·ͨ·ʯϝϦοτ͚ͩڗडͰ͖͍ͯΔ͚ͩ • ʮPropsͷόέπϦϨʔ͕ݏͩʯ → Θ͔ΓΈ͕ਂ͍ → ߏԽɾઃܭ্͕ख͘Ͱ͖͍ͯͳ͍Մೳੑ
StoreͰશͯཧύλʔϯ ʢͦΜͳ͜ͱͨ͠ܦݧ͕ͳ͍ͷͰໝʣ
/components/SpecialButton.vue <template> button.button(:disabled=“disabled”) ΞΫγϣϯ <script> computed: { disabled() { return
this.$store.getters[‘page/isDisabled’] } } /store/modules/page.ts state = { canOperate: false, // ૢ࡞ݖݶ hasContent: false // ίϯςϯπ͕͋Δ͔ } getters = { isDisabled(s) { // Ϙλϯ͕ඇ׆ੑ͔ return !(s.canOperate && s.hasContent) } } views ┗ Page.vue // ϖʔδίϯϙʔωϯτ components ┣ Content.vue // Page.vue͔ΒݺΕΔ ┗ SpecialButton.vue // Content.vue͔ΒݺΕΔ store ┣ modules ┣ ┗ page.ts // Page.vueʹؔ͢Δstore ┗ index.ts • disabeldpropsͰ͖͢ → SpecialButton͕storeͷมߋʹґଘ͍ͯ͠Δ • page.tsͷstateʹ֨ೲ͞ΕΔཻ͕ό ϥόϥ → ΄΅࣮֬ʹωʔϜεϖʔεͷίϯϑϦΫτ͕ى͜Δ • ଞʹ৭ʑ͋Δׂ͕Ѫ
Vuex (Store) ΛͲ͏͏ͷ͔
άϩʔόϧมͰ͋Δ͖ͷ & ӬଓԽ • ʮϩάΠϯϢʔβใʯʮઃఆใʯͳͲͷɺجຊతʹߋ৽͕গͳ ͘ɺͲͷίϯϙʔωϯτͰ͍͘͠ճ͢ඞཁ͕͋ΔσʔλΛ֨ೲ → $store.dispatchΛݺΜͰɺaction -> commitͰͦͷ··storeʹ֨ೲͰ͖Δ
-> ΄΅ϫϯϥΠϯͰॻ͚Δ → جຊతʹࢀরͷΈͷσʔλͩͱɺ֤ίϯϙʔωϯτͰͷมߋʹΑΔίϯϑϦΫτ͕ى͜Γʹ͘͘ɺΑΓอकੑ͕ ߴ͘ͳΔ • ӬଓԽ͍ͨ͠σʔλʢvuex-persistedstateʣ → SPAͰɺॳظԽͷσʔλϑΣονͷ࣌ؒΛͰ͖Δ͚ͩॖ͍ͨ͠߹ -> [Local|Session]StorageʹೖΕ͓͍ͯͯɺ ࣍ճΞΫηε࣌ʹσϑΥϧτͰදࣔͰ͖ΔΑ͏ʹͰ͖Δ → ઃఆใͳͲɺAPIΛ࡞ͬͯαʔόͰӬଓԽ͢Δ΄ͲͰͳ͍ͷͰɺLocalStorageӬଓԽ͓ͯ͘͠ͱศར ͜Ε͚ͩʹ͠·͠ΐ͏ʂʂʂ
·ͱΊ StoreύλʔϯΛਖ਼͍͘͜͠ͳͯ͠ UXͷ༏ΕͨΞϓϦΛ࡞Ζ͏ʂ