質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

Vuex

Vuexは、Vue.js アプリケーションのための状態管理ライブラリです。アプリケーション内で使用するコンポーネントのための集中データストアを提供。コンポーネント同士でデータをやり取りし、処理のフローを一貫させたり、データの見通しを良くすることができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

解決済

1回答

2484閲覧

【Nuxt.js】Getterでstateがうまく取得できない

tenchim

総合スコア8

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

Vuex

Vuexは、Vue.js アプリケーションのための状態管理ライブラリです。アプリケーション内で使用するコンポーネントのための集中データストアを提供。コンポーネント同士でデータをやり取りし、処理のフローを一貫させたり、データの見通しを良くすることができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2021/07/12 07:23

編集2021/07/12 07:26

お世話になっております。
Nuxt.jsを使っていて以下の問題に直面しました。

まず起こっていること・試したことを順番に説明致します。

①nuxtServerInitでstate.userをセット

//mutations内にて mutations: { setUser(state, payload) { state.user = {...payload}; } }, //nuxtServerInit内にて const userInfo = {  name: 'name' }; commit("setUser", userInfo);

②nuxtServerInit内でstate.userをgetters.getUserで受け取りコンソール出力→想定通り動作

//getters内にて getters: { getUser: state => state.user }, //nuxtServerInit内にて console.log(getters.getUser); //出力結果 { name: 'name' }

③index.vueでstate.userをthis.$store.getters.getUserで受け取り表示→上手く動作しない(空オブジェクトが返ってくる)

<template> <div> this page is index.vue userName: {{user}} </div> </template> <script> export default { computed: { user() { return this.$store.getters.getUser;    //空オブジェクト{}が返ってくる。 } }, } </script> // {{user}}に {} が表示される。

④そこで試しにstate.user.nameにデフォルトでdefault nameという値を持たせ、index.vueでuser.nameを取得すると上手く動作した

// store/index.jsのstate内にて state: () => ({ user: { name: 'default name' } }), // pages/index.vueにて <template> <div> this page is index.vue userName: {{user.name}} </div> </template> <script> export default { computed: { user() { return this.$store.getters.getUser; } }, } </script> // {{user.name}}で「default name」と表示される。

以上のように、サーバー側でstateのuser.nameを取得できているにも関わらず、クライアント側で取得できない原因が分からず詰まっています。
是非アドバイスなどいただければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k4a

2021/07/12 08:46

④のようにデフォルト値を設定した状態で、①の`state.user`をセットし、④のように表示した場合はどうなっていますか?
tenchim

2021/07/12 09:00

ご返信ありがとうございます。 ・サーバー側のコンソールには、 { name: 'name' } が表示され、 ・クライアント側のindex.vueの{{user.name}}には「default name」と表示されます。 つまりサーバー側はセットした値、クライアント側はデフォルト値が表示されています。
guest

回答1

0

ベストアンサー

勘違いだったら申し訳ないのですが、NuxtのStoreはエクスポート記法で書くような気がします。
私の環境では以下のプログラムで動きましたがいかがでしょうか?

/store/index.js

javascript

1export const state = () => ({ 2 user: { 3 name: 'default name', 4 }, 5}) 6 7export const getters = { 8 getUser: (state) => state.user, 9} 10 11export const actions = { 12 nuxtServerInit({ commit }, { req }) { 13 const userInfo = { 14 name: 'Yamada Taro', 15 } 16 console.log(this.getters.getUser.name) 17 commit('setUser', userInfo) 18 console.log(this.getters.getUser.name) 19 }, 20} 21 22export const mutations = { 23 setUser(state, payload) { 24 state.user = { ...payload } 25 }, 26}

/pages/index.vue

Vue

1<template> 2 <div>this page is index.vue userName: {{ user.name }}</div> 3</template> 4 5<script> 6export default { 7 computed: { 8 user() { 9 return this.$store.getters.getUser 10 }, 11 }, 12} 13</script>

投稿2021/07/12 10:50

編集2021/07/12 11:24
k4a

総合スコア983

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tenchim

2021/07/12 12:35

ご回答いただきありがとうございます。 全くもってその通りでした。 エクスポート記法に修正したところ、正常に動作致しました。 ご丁寧な回答、誠にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問