Upgrade to Pro — share decks privately, control downloads, hide ads and more …

「使いどころ」 からはじめるVuex

「使いどころ」 からはじめるVuex

Vue.jsに入門するにあたって、Vue.jsのドキュメント、入門記事、活用事例…などで Vuex が登場してきますが、

- なんでVuexを使うんだろう
- どんなところに使うんだろう
ともやもやしながら進めていませんか?

ここでは、Vuexの使いどころがスッキリした体験談からVuexを使い始める話をします。

Masataka Yoshida

December 13, 2018
Tweet

More Decks by Masataka Yoshida

Other Decks in Programming

Transcript

  1. Vue.js便利ですよね この、データを渡す部分について \5 <template> <section class="container"> <h2> My supreme {{

    projectName }} project </h2> </section> </template> <script> export default { computed: { projectName() { return 'Nuxt.js' } } } </script>
  2. コンポーネント(Vue.js) • この部分は使い回しできるよね \13 <template> <div class="sample"> <p> Load Success!

    {{ name }} <button @click="$emit('callme', name)">Call me!</button> </p> </div> </template> <script> module.exports = { props: { name: { default: ‘SAMPLE' } } } </script> <template> <section class="container"> <sample name=“Hoge" @callme="onCallMe"/> </section> </template> <script> import Sample from ‘~/components/ Sample.vue' export default { components: { Sample }, methods: { onCallMe: function(callName) { this.projectName = callName } } } </script> pages/index.vue components/Sample.vue
  3. Vuexのはじめかた • Vuexをインストールする • ストアを作る - 状態を保持する state - 状態を変更する

    mutations - mutationを呼び出すactions - 他にgetterがある • ストアを使う \26
  4. ストアを作る \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の名前と
 変更処理の内容
  5. ストアを使う <template> <section class=“container"> <h2>My supreme {{ projectName }} project</h2>

    <sample name=“Hoge" @callme="onCallMe"/> </section> </template> <script> export default { computed: { projectName() { return this.$store.state.vuexsample.projectName } }, methods: { onCallMe: function(callName) { this.$store.commit('vuexsample/change', callName) } } } </script> pages/index.vue
  6. store/vuexsample.js を使う • <script>内で読むとき \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の名前
  7. store/vuexsample.js を使う • <template>内で読むとき \33 <template> <div> <h2> My supreme

    {{ $store.state.vuexsample.projectName }} project </h2> </div> </template>
  8. まとめ • 小規模ならVuexを使わなくても問題ない • (例えば)Vuexを使わないと次のページの遷移で
 問題が起きやすい - データのバケツリレー - 状態が正しく設定・反映されない

    • Vuexは表示に関わる「状態」を管理する • Nuxtわかりやすい - Vuexが初めから入っている - ディレクトリで分けられている - 名前空間機能がstoreのファイル名だけで使える \41