designsupply.llc
  • aboutabout
  • servicesservices
  • worksworks
  • mediamedia
  • contactcontact
  • homeサイトトップ
  • about会社概要
  • services業務内容
  • works実績紹介
  • mediaメディア
  • contactお問い合わせ
ja/

media

メディア

  1. サイトトップ
  2. メディア
  3. プログラミングの記事
  4. Vue CLIとVuexでアプリケーションの状態変化を扱う

Vue CLIとVuexでアプリケーションの状態変化を扱う

  • 2019.05.15
  • プログラミング
  • Vue.js
Updated: 2019.05.15
Vue.jsではdataオプションにあるデータの値によってDOMを再描画させて要素を切り替えて表示させるというケースが多々あるかと思います。ただし、コンポーネントが多くなってきたり、構造が複雑になってくるとそのデータの管理が大変になります。そんな時に「Vuex」という拡張ライブラリを採用することで、複数のデータを一括でアプリケーションの状態管理ができるようになります。   今回はVue CLIで作成したVueプロジェクトにてVuexを使ったアプリケーションの状態管理を行うサンプルを見ていきたいと思います。  
アプリケーションの状態管理をするための拡張ライブラリのVuex
Vue.jsでアプリケーションの状態管理をする際には、拡張ライブラリである「Vuex」を使うことになります。Vue CLIですとインストール時にまとめて追加できますのであらかじめ設定しておきます。詳しくは過去記事「vue-cli 3系への移行と新規Vue.jsプロジェクト作成とビルド方向まとめ」を参考に。Vue CLIを使わず、スタンドアローンなどの場合は下記のコマンドでライブラリをインストールします。
$ npm install vuex
   
基本的なアプリケーションの状態管理の流れ
Vuexのインストールが完了すれば、まずはmain.jsへ下記の方にVuex用のスクリプトを読み込むように追記していきます。合わせてインスタンス内にもVuexを追記します。 【main.js】
import Vue from 'vue'
import App from './App.vue'
import store from './store'

Vue.config.productionTip = false

new Vue({
 store,
 render: h => h(App)
}).$mount('#app')
  次に、Vuexを設定するスクリプトファイルである「store.js」に「state」と呼ばれるデータの登録や、そのデータを更新する関数などを設定してきます。まずは、Vue内でVuexを実行するように記述し、その中で各項目を記述していきます。   ちなみに今回はコンポーネント内に設置されたボタンをクリックするとアプリケーションの状態が変化し、それによってDOMが再描画され表示が変わるというケースで見ていきます。まずはコードを確認してみましょう。 【store.js】
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
 state: {
  isTextColor: false
 },
 mutations: {
  mutateTextColor(state) {
   state.isTextColor = !state.isTextColor;
  }
 },
 actions: {
  commitTextColor(store) {
   return store.commit('mutateTextColor')
  }
 }
})
  上記のようにstore.jsでは「state」「mutations」「actions」というものがあります。アプリケーションの状態管理を行う上でこれらの意味を理解しておく必要があります。  
state Vueインスタンスでいう「data」オプションのようなもので、初期値としての文字列や配列・ブーリアン値などの値が入ります。
mutations stateの値を更新します。stateの値を更新できるのはmutationsからのみとなります。commit関数で呼び出されます。
actions 登録されたmutationsを実行します。commit関数の引数で実行するmutationsを指定します。コンポーネントからはdispatch関数で実行できます。
  このように、データは「actions」→「mutations」→「state」と流れていき、最後にコンポーネントのDOMが再描画されるイメージになります。ですので上記の例ですと、まずはstateの値に初期値のデータを入れていきます。そして、mutationsでstateの値を変えるためのデータを設定します。最後にactionsでmutationsを実行するための関数を記述します。   これでデータが流れる経路は整いましたが、このままですとactionsを実行しないとstateの値を変えることができません。なので、コンポーネント側からactionsを実行するためのイベントを下記のように設定していきます。 【App.vue】
<template>
 <div id="app">
  <button @click="color_change()">クリック!!</button>
  <p 
   :class="[
    getState === true ?
     'color-red' :
     'color-black'
   ]">ボタンクリックでテキストの文字色が変わります
  </p>
 </div>
</template>

<script>
 export default {
  name: 'App',
  computed: {
   getState() {
    return this.$store.state.isTextColor
   }
  },
  methods: {
   color_change() {
    this.$store.dispatch('commitTextColor')
   }
  }
 }
</script>

<style lang="scss">
 .color-red {
  color: #f00;
 }
 .color-black {
  color: #000;
 }
</style>
  コンポーネント側のテンプレートには、状態を変更するためのトリガーとなるボタン要素と、状態変化が反映される要素を用意しています。ボタン要素にはクリックイベントを設定し、再描画される要素にはstateの値を取得して条件分岐させるロジックを用意しておきます。   スクリプトでは、まず「computed」の算出プロパティで、stateの値を取得して返すための関数を作成します。コンポーネントにおいてはstateの値を「this.$store.state.[STATE_NAME]」で取得することができます。   次に「methods」で先ほどstore.jsに用意したactionsを実行するための関数を用意します。actionsを呼び出すには「this.$store.dispatch()」で実行でき、引数に該当するactionsの関数を指定します。このmethodsで指定した関数を先ほどのボタン要素のクリックイベントで発火させます。   最後のstyleでは、今回ですとstateの値で再描画されると同時にclass名を切り替えているので、それぞれのスタイルを指定しておきます。これでブラウザで確認すると、stateの値が変わり、その度にDOMが再描画されているのが確認できます。デベロッパーツールでも値の変化が見れますね。 Vue CLIとVuexでアプリケーションの状態変化を扱う Vue CLIとVuexでアプリケーションの状態変化を扱う Vue CLIとVuexでアプリケーションの状態変化を扱う  
  今回は基本的なところで簡単なサンプルになりましたが、実際はこのような状態管理をいろんな値を使って行なっていくことになります。使いこなすとかなり便利なものですので、ぜひマスターしておきたいところですね。
XでシェアLINEで送るはてブに追加

この記事を書いた人オガワ シンヤ

合同会社デザインサプライ代表兼CEO / ディレクター・ウェブデザイナー・フロントエンドエンジニアをやっています。「ウェブとデザインでヒト・モノ・サービスを繋げ新しい価値を生み出す」をコンセプトに日々奮闘中!制作中はダイエットコーラとチョコレートが欠かせないアラフォーWebクリエイター。

Sponsored Link

  • Showcase
  • Startify UI
  • Functional Gradation Generator
  • Coloooors

keyword search

categories

  • WordPress(61)
  • JavaScript(49)
  • Vue.js(48)
  • CSS(46)
  • jQuery(34)
  • Nuxt.js(22)
  • Sass(21)
  • Gulp(17)
  • webpack(16)
  • PHP(14)
  • HTML(14)
  • GSAP(11)
  • React(10)
  • Vite(9)
  • Pug(9)
  • Laravel(8)
  • Cordova(8)
  • Linux(7)
  • Next.js(6)
  • Apache(5)
  • Shopify(4)
  • REST API(4)
  • Node.js(4)
  • Smarty(3)
  • Git(3)
  • JSON(3)
  • その他プログラミング(3)
  • Google Apps API(3)
  • Bootstrap(3)
  • 環境構築・システム(3)
  • TypeScript(2)
  • EJS(2)
  • RMS(2)
  • Docker(2)
  • Instagram API(2)
  • Excel VBA(2)
  • SVG(1)
  • Dart(1)
  • ECカートASP(1)
  • Markdown(1)
  • AMP(1)
  • Nginx(1)
  • XML(1)
  • shellscript(1)
  • Ruby(1)
  • MySQL(1)

recent articles

  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#6:PWA対応とビルド時のエラー
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#6:PWA対応とビルド時のエラー

    2024.12.25/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#5:アナリティクス・アドセンスの導入とサイトマップ作成
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#5:アナリティクス・アドセンスの導入とサイトマップ作成

    2024.08.26/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#4:静的・動的ルーティングとページ作成
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#4:静的・動的ルーティングとページ作成

    2024.07.31/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#3:メタ情報設定・ファイル最適化・ステート管理
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#3:メタ情報設定・ファイル最適化・ステート管理

    2024.06.30/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#2:コーディング環境の構築
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#2:コーディング環境の構築

    2024.05.29/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#1:インストール・導入
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#1:インストール・導入

    2024.04.30/Next.js
  • 次の記事
  • 一覧に戻る
  • 前の記事

まだ依頼内容が決まっていなくても、ご相談ください。

課題の整理や小さな検証、UI/UX・フロントエンドの部分的な支援から始められます。

お問い合わせやご相談はこちらから

Webサイト・プロダクトの企画設計/UI・UXデザイン/フロントエンド開発合同会社デザインサプライ(DesignSupply. LLC)

Office:大阪府大阪市天王寺区清水谷町3-22
Email:info@designsupply-web.com
home
  • サイトトップ
about
  • 3つのポリシー
  • 経営理念
  • 代表・クリエイター紹介
  • 会社概要
services
  • ビジネス・プロダクト支援
  • UI/UX・フロントエンド開発支援
  • プロジェクトの進め方・支援体制
  • エデュケーション事業
works
  • 開発プロジェクト支援
  • クリエイティブ制作
  • 自社プロダクト
media
  • デザイン
  • プログラミング
  • マーケティング
  • Web開発
  • 写真・動画制作
contact
  • お問い合わせ
news
  • インフォメーション
privacy
  • プライバシーポリシー

WE THINK WITH YOU, DESIGN FOR PEOPLE, AND BUILD WHAT WORKS.

WE THINK WITH YOU, DESIGN FOR PEOPLE, AND BUILD WHAT WORKS.

© 2013 - 2026 DesignSupply.LLC
サイトトップへ
contact