Slide 1

Slide 1 text

ԿͰ΋͔ΜͰ΋StoreʹͿͪࠐ· ͳ͍Ͱ࣮૷Λ͢Δ࿩ with Vuex 2020.05.20@PWA Night vol.16

Slide 2

Slide 2 text

About me • Twitter - @_slont • גࣜձࣾFinatext - Engineer • Vue.js, Java, Go, Elixir • ࣗ࡞PWA Paroty

Slide 3

Slide 3 text

https://medium.com/finatext/composition-api-for-vue3-63631dbadcef https://medium.com/finatext/vue-on-ionic%E3%81%A7web

Slide 4

Slide 4 text

ίτͷൃ୺͸

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

શͯStoreͰ؅ཧ…ʁ ͍͔ͭഁ୼͢Δ͜ͱ͸໨ʹݟ͑Δʂʢʁʣ

Slide 7

Slide 7 text

VuexΛ༻͍ͨ StoreύλʔϯͰͷ࣮૷Λߟ͑Δ

Slide 8

Slide 8 text

Vuexͱ͸ • ঢ়ଶ؅ཧύλʔϯ + ϥΠϒϥϦ → Flux, ReduxͷྲྀΕΛ἞Ή → αʔυύʔςΟͰӬଓԽ΋Մೳ • Vueίϯϙʔωϯτ͔Β$storeܦ༝ͰΞΫηεՄೳ → ͜Ε͸άϩʔόϧม਺ͱͯ͠ͷੑ࣭Λ࣋ͭͷͰɺศٓతʹͦ͏ݺͿ ɹ→ ʮάϩʔόϧม਺͡Όͳ͍ͩΖ͏͕ʂʯͱ͔ݴΘΕ·͕ͨ͠ɺఆٛͰ͸ͳ͘ৼΔ෣͍ͷ࿩ͳͷͰແࢹ

Slide 9

Slide 9 text

άϩʔόϧม਺͕ ԿނΞϯνύλʔͳͷ͔

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

StoreͰ΍ͬͪΌ͏ਓͷࢥߟʢໝ૝ʣ • ʮάϩʔόϧͬͯ΋தͰείʔϓΛ੾ͬͯΔ͔Βେৎ෉ʯ → ͋Δίϯϙʔωϯτ಺είʔϓͰด͡Δ͜ͱ͕Ͱ͖Δม਺Λάϩʔόϧʹग़ͯ͠Δ࣌఺Ͱʢґଘؔ܎͕ʣີͰ͢ → είʔϓͷωʔϜεϖʔε͕িಥͨ͠ΒऴΘΔ • ʮ݁ہAPIͱ͔΋άϩʔόϧͳͷͰ·ͱΊͨํ͕ྑ͍ʯ → ਺ेݸҎ্ͷAPIΛ࢖͏େن໛ͳΞϓϦͩͱstore͕๲େʹͳͬͯഁ୼͢Δ → ࢲݟ͕ͩɺstoreͱ͍͏໊લΛ࢖༻ͯ͠͠·ͬͨͷ͕ྑ͘ͳ͔ͬͨ • ʮείʔϓҙࣝ͠ͳͯ͘ྑ͍ͷͰศརʯ → ؒҧ͍ͳ͍ → େن໛ΞϓϦ͡Όͳ͍͔Βʮͨ·ͨ·ʯϝϦοτ͚ͩڗडͰ͖͍ͯΔ͚ͩ • ʮPropsͷόέπϦϨʔ͕ݏͩʯ → Θ͔ΓΈ͕ਂ͍ → ߏ଄Խɾઃܭ্͕ख͘Ͱ͖͍ͯͳ͍Մೳੑ

Slide 12

Slide 12 text

StoreͰશͯ؅ཧύλʔϯ ʢͦΜͳ͜ͱͨ͠ܦݧ͕ͳ͍ͷͰໝ૝ʣ

Slide 13

Slide 13 text

/components/SpecialButton.vue button.button(:disabled=“disabled”) ΞΫγϣϯ 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 • disabeld͸propsͰ౉͢΂͖ → SpecialButton͕storeͷมߋʹґଘ͍ͯ͠Δ • page.tsͷstateʹ֨ೲ͞ΕΔཻ౓͕ό ϥόϥ → ΄΅࣮֬ʹωʔϜεϖʔεͷίϯϑϦΫτ͕ى͜Δ • ଞʹ΋৭ʑ͋Δׂ͕Ѫ

Slide 14

Slide 14 text

Vuex (Store) ΛͲ͏࢖͏ͷ͔

Slide 15

Slide 15 text

άϩʔόϧม਺Ͱ͋Δ΂͖΋ͷ & ӬଓԽ • ʮϩάΠϯϢʔβ৘ใʯʮ୺຤಺ઃఆ৘ใʯͳͲͷɺجຊతʹߋ৽͕গͳ ͘ɺͲͷίϯϙʔωϯτͰ΋౳͘͠࢖͍ճ͢ඞཁ͕͋ΔσʔλΛ֨ೲ → $store.dispatchΛݺΜͰɺaction -> commitͰͦͷ··storeʹ֨ೲͰ͖Δ -> ΄΅ϫϯϥΠϯͰॻ͚Δ → جຊతʹࢀরͷΈͷσʔλͩͱɺ֤ίϯϙʔωϯτͰͷมߋʹΑΔίϯϑϦΫτ͕ى͜Γʹ͘͘ɺΑΓอकੑ͕ ߴ͘ͳΔ • ӬଓԽ͍ͨ͠σʔλʢvuex-persistedstateʣ → SPAͰɺॳظԽͷσʔλϑΣονͷ࣌ؒΛͰ͖Δ͚ͩ୹ॖ͍ͨ͠৔߹ -> [Local|Session]StorageʹೖΕ͓͍ͯͯɺ ࣍ճΞΫηε࣌ʹ΋σϑΥϧτͰදࣔͰ͖ΔΑ͏ʹͰ͖Δ → ୺຤಺ઃఆ৘ใͳͲ͸ɺAPIΛ࡞ͬͯαʔόͰӬଓԽ͢Δ΄ͲͰ΋ͳ͍ͷͰɺLocalStorageӬଓԽ͓ͯ͘͠ͱศར ͜Ε͚ͩʹ͠·͠ΐ͏ʂʂʂ

Slide 16

Slide 16 text

·ͱΊ StoreύλʔϯΛਖ਼͘͠࢖͍͜ͳͯ͠ UXͷ༏ΕͨΞϓϦΛ࡞Ζ͏ʂ