Vuexの続きです。前回はVuexが何を管理しているのか調べました。Vuexのストアでコンポーネントを跨いで参照するデータを一元管理するということでした。今回はストアに実際にデータ(値)を置いて、コンポーネントから表示してみます。それではいきましょう!
【目次】
- Vuexを利用する方法(今回はNuxt.js)
- ストアフォルダにindex.jsを作る
- index.jsにデータを配置する関数を定義
- ステートにデータを保管する
- index.vueの中でストアの値を読み込む
- 最後に
※参考:【Vue.js】Vuexの「状態管理」はいったい何の状態を管理しているのか調べた - クモのようにコツコツと
※参考:Vue.jsの習得のためにやったことまとめ
qiita.com
Vuexを利用する方法(今回はNuxt.js)
前回書いたようにVuexを利用するにはいくつかの方法がある。
- vuex.jsファイルをリンク(CDNでもOK)
- npmでインストール
- Vue CLIのオプションでインストール
- Nuxt.jsには最初から同梱
※参考:【Vue.js】Vuexの「状態管理」はいったい何の状態を管理しているのか調べた - クモのようにコツコツと
前々回まで触ってきたNuxt.jsには最初からVuexが同梱されているので、今回はそれを利用する。
※参考:【Vue.js】Nuxt.jsで何ができるのか調べた(SSR、ルーティング、静的ファイル生成など) - クモのようにコツコツと
プロジェクトを起動していない場合はこちらの方法で起動。
※参考:【Vue.js】$route.paramsと$route.queryでパスやGETパラメータから動的にページを作る - クモのようにコツコツと
ストアフォルダにindex.jsを作る
書籍「Vue.js & Nuxt.js超入門」を参考に進める。
- 作者:掌田津耶乃
- 発売日: 2019/02/05
- メディア: 単行本
nuxt.jsのファイル一式の直下にストアフォルダ(store
)があらかじめ用意されている。中にはREADME.md
だけが入っている。ここにindex.js
を追加する。
. └ store ├README.md └index.js(追加)
index.jsにデータを配置する関数を定義
index.js
の中にスクリプトを書く。まず全体像
JSコード
import Vuex from 'vuex' const vuexTest = () => { return new Vuex.Store({ //データを保管 }); } export default vuexTest
import
でVuex
オブジェクトをインポート- 関数
vuexTest
を定義 vuexTest
の中でVuex.Store()
の中にデータを定義Vuex.Store()
の中でデータを定義してreturn
で返すexport
で関数vuexTest
をエクスポート
import
でVuex
オブジェクトをインポートすることで関数vuexTest
でVuex.Store()
を使えるようになる。
export
関数vuexTest
をエクスポートすることでコンポーネントでexport
関数が使えるようになる。
ステートにデータを保管する
関数vuexTest
のステート(stete)にデータを保管する。
const vuexTest = () => { return new Vuex.Store({ state: function() { return { message: 'ゔゅえっくすてすと', }; }, }); }
Vuex.Store()
の中は連想配列state
キーの値は無名関数で中はreturn
return
の中は無名関数でmessage
キーの値を「ゔゅえっくすてすと」とする
state
は「ステート」という機能で、ストアの値を保管する場所。ここにmessage
キーの値を用意する。
index.vueの中でストアの値を読み込む
/pages/index.vue
を開く。この中に値を読み込む。
<!--前略--> <logo /> <h1 class="title"> nuxt_appへようこそ! </h1> <h2 class="subtitle"> 私の邪悪なNuxt.jsプロジェクト </h2> <p>{{$store.state.message}}、はじめました。</p> <p><router-link to="/jaaku">邪悪なページを覗く</router-link></p> <!--後略-->
追加したのはこの部分
<p>{{$store.state.message}}、はじめました。</p>
$store
オブジェクトの中のstore
の中のmessage
の値を読み込む
$store
でストアの値を読み込むことができる。
変更が反映されたかを確認するには、ターミナルを一旦閉じて$ npm run dev
で再起動する必要があるようだ。(エラーになったり画面が何度もリロードしたりした)
再起動してhttp://localhost:3000/
を開くと…
おお、やった!「ゔゅえっくすてすと、はじめました。」と表示された!
先ほどのmessage
の値を打ち変えると…
const vuexTest = () => { return new Vuex.Store({ state: function() { return { message: 'Vuex_Test', //打ち替え }; }, }); }
反映される!
打ち変えた直後はブラウザがチカチカリロードして変な挙動。いったんページを閉じてhttp://localhost:3000/
を開いたら治った。。
最後に
Vuexのはじめの一歩、ストアに値を保管して、それをコンポーネントから参照して表示することに成功しました!親子関係を気にせずにキーの名前だけを呼び出すのはやはりシンプルに感じました♪次回も引き続きVuexでできることを試していきたく思います。それではまた!
※参考:Vue.jsの習得のためにやったことまとめ
qiita.com