「使いどころ」 からはじめるVuex
by
Masataka Yoshida
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
「使いどころ」 からはじめるVuex 2018/12/13 fun-tech meetup #7 Webフロントエンド Masataka Yoshida
Slide 2
Slide 2 text
自己紹介 吉田 匡孝(Masataka Yoshida) 株式会社オープンストリーム 戦略技術推進本部 \2 目に見えるモノを作る + 新しい技術に触れるおしごとがしたいなー Web CakePHP, Spring, … スマートフォンアプリ Ionic, Objective-C, Java, … AWS, Python, …
Slide 3
Slide 3 text
はなすこと • 何でVuexが必要なのか • Vuexの入門 \3 はなさないこと • Vue.jsの入門・チュートリアル • Vuexを用いた状態管理の設計について
Slide 4
Slide 4 text
何でVuexが必要なのか
Slide 5
Slide 5 text
Vue.js便利ですよね この、データを渡す部分について \5
My supreme {{ projectName }} project
export default { computed: { projectName() { return 'Nuxt.js' } } }
Slide 6
Slide 6 text
Vuex • Vue.jsを使った事例によく Vuex が出てくる • Vue.jsドキュメント > スケールアップ > 状態管理 \6 https://jp.vuejs.org/v2/guide/state-management.html
Slide 7
Slide 7 text
Vuexとは? • 状態管理パターン + ライブラリ - “状態”管理パターン → カウンターの「数値」 https://vuex.vuejs.org/ja/
Slide 8
Slide 8 text
No content
Slide 9
Slide 9 text
“Vuexでコレを作りました!” • Vuex 入門で出てくる例 - ToDoリスト… - ショッピングカート… - 検索アプリ… \9
Slide 10
Slide 10 text
正直、何にVuexを 使えばいいか分からない
Slide 11
Slide 11 text
ある「別」の例から考える • 名前を書き換えたまま次のページに遷移する \11 ▼ 名前を変えるボタン
Slide 12
Slide 12 text
Nuxt.jsを用いて話します • 新しくプロジェクトを立ち上げる想定 - ページは「pages」 - コンポーネントは「components」 など、所定のディレクトリに置くだけで 機能する \12 ▶
Slide 13
Slide 13 text
コンポーネント(Vue.js) • この部分は使い回しできるよね \13
Load Success! {{ name }} Call me!
module.exports = { props: { name: { default: ‘SAMPLE' } } } import Sample from ‘~/components/ Sample.vue' export default { components: { Sample }, methods: { onCallMe: function(callName) { this.projectName = callName } } } pages/index.vue components/Sample.vue
Slide 14
Slide 14 text
次のページに渡すには • Vuexを使わないでこの状態を次のページに渡したい \14 →Routerのパラメータとして渡す!GETパラメーターなイメージ go to next
My supreme {{ $route.params.projectName }} project 送り元 受け側 ▶
Slide 15
Slide 15 text
データの量が増えたらどうしますか? 100ページにわたって リンクを貼って受け取る処理を 書きますか?
Slide 16
Slide 16 text
No content
Slide 17
Slide 17 text
そこでVuex Fuga Fugaにしろ… Fugaにしろ… Fugaにするボタン がクリックされた!
Slide 18
Slide 18 text
そこでVuex Fuga Fugaにしろ… Fugaにしろ… Fugaにするボタン がクリックされた!
Slide 19
Slide 19 text
一つにまとめる? 自分で値の置き場を作れば 面倒くさいVuexは不要では
Slide 20
Slide 20 text
一つにまとめる? 自分で値の置き場を作れば 面倒くさいVuexは不要では ○
Slide 21
Slide 21 text
一つにまとめる? 自分で値の置き場を作れば 面倒くさいVuexは不要では ○
Slide 22
Slide 22 text
https://vuex.vuejs.org/ja/ 小規模ならVuexなしで問題ない
Slide 23
Slide 23 text
どうやってデバッグしますか? その仕組みも自分で作りますか? https://github.com/vuejs/vue-devtools
Slide 24
Slide 24 text
用意してくれるVuex便利 ☺
Slide 25
Slide 25 text
Vuexの入門
Slide 26
Slide 26 text
Vuexのはじめかた • Vuexをインストールする • ストアを作る - 状態を保持する state - 状態を変更する mutations - mutationを呼び出すactions - 他にgetterがある • ストアを使う \26
Slide 27
Slide 27 text
Vuexをインストールする • Nuxt.jsにはVuexが入っている インストール(ファイル配置・読み込み)の手間がなくなる • 所定の場所(store/)にストアを置くだけで使えるようになる • Nuxt.jsを使わない場合でもVuexは使えます ファイル配置後はVuexを読み込む必要があります(2パターン) \27 import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) Nuxt.jsを使いましょう
Slide 28
Slide 28 text
ストアを作る \28 export const state = () => ({ projectName: 'Vuex.js' }) export const mutations = { change(state, newName) { state.projectName = newName }, reset(state) { state.projectName = 'Vuex.js' } } - 状態を管理する state - 状態を変更する mutations store/vuexsample.js stateの名前と初期値 mutationの名前と 変更処理の内容
Slide 29
Slide 29 text
あれ? actions は??
Slide 30
Slide 30 text
actions • mutations を呼び出す 次に当てはまらなければ使わなくてもよい ✓状態を変えるときに非同期処理を入れたい mutations内では非同期処理が使えない ✓複数の状態・mutationsを触りたい mutationsの処理内容は小さくすべき \30
Slide 31
Slide 31 text
ストアを使う
My supreme {{ projectName }} project
export default { computed: { projectName() { return this.$store.state.vuexsample.projectName } }, methods: { onCallMe: function(callName) { this.$store.commit('vuexsample/change', callName) } } } pages/index.vue
Slide 32
Slide 32 text
store/vuexsample.js を使う • 内で読むとき \32 this.$store.state.vuexsample.projectName • <script>内で書くとき storeを直接変更しない this.$store.state.vuexsample.projectName = callName ͱ͔ this.$store.commit('vuexsample/change', callName) mutationの名前 Nuxtを使うとストアに名前を付けて分割するのが簡単 Vuexの名前空間(namespaced)機能 mutationの引数 stateの名前
Slide 33
Slide 33 text
store/vuexsample.js を使う • 内で読むとき \33
My supreme {{ $store.state.vuexsample.projectName }} project
Slide 34
Slide 34 text
次のページに渡す実装が 簡単になりましたね
Slide 35
Slide 35 text
名前を変更する アプリなんか 作らない?
Slide 36
Slide 36 text
Vuexの使いどころがはっきりした例 • Nuxt.jsにBulmaを組み込んだら、Vuexストアが理解できた件 - https://qiita.com/isamusuzuki/items/ 5ec800e423a3a56ef03d - メニューは全ページに登場する - ページ遷移では開いたメニューが閉じない - 「メニューを開いているか」をVuexで管理して、 ページ遷移でメニューを閉じる \36
Slide 37
Slide 37 text
“データのバケツリレー”を解決 • Vue.js で初めて SPA を開発する際に考えたこと - https://qiita.com/c-su/items/266552f444489f254e85 データのバケツリレーを解消したい - Vuexの使用を検討してください。
Slide 38
Slide 38 text
ToDo ショッピングカート…
Slide 39
Slide 39 text
結局、Vuexは 表示している「状態」 を管理している +簡単に +バグが起きにくいように
Slide 40
Slide 40 text
これ以外にも 使いどころがありそうです あくまでも一例で
Slide 41
Slide 41 text
まとめ • 小規模ならVuexを使わなくても問題ない • (例えば)Vuexを使わないと次のページの遷移で 問題が起きやすい - データのバケツリレー - 状態が正しく設定・反映されない • Vuexは表示に関わる「状態」を管理する • Nuxtわかりやすい - Vuexが初めから入っている - ディレクトリで分けられている - 名前空間機能がstoreのファイル名だけで使える \41