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

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

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

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

Nuxt.js

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

Vuex

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

解決済

vuex state値をmounted内で使いたい

holic
holic

総合スコア132

Vue.js

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

Nuxt.js

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

Vuex

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

1回答

0評価

0クリップ

10918閲覧

投稿2018/11/13 19:12

編集2018/11/13 19:20

前提

「vuex state値をmounted内で使いたい」とタイトルをつけさせていただきましたが、
下記に紹介するソース・目的とするゴールが本当にvue.jsの規定に沿っているのか自体が不安と考えております、合わせてご意見をいただけましたら今後のわたくしの勉強にもなると思います、お手数ではございますがよろしくお願いいたします。

##ソース

####store/posts.js(vuexのソース)

js

export const state = () => ({ postsCategories: null }) export const getters = { postsCategories: state => state.postsCategories } export const mutations = { setPostsCategories(state, postsCategories) { state.postsCategories = postsCategories } } export const actions = { async addPostsCategory({ commit }, payload) { const newCat = {} newCat[payload.slug] = payload //console.log(newCat) await this.$axios.$patch('/postscategory.json', newCat) const postsCategories = await this.$axios.$get('/postscategory.json') //const postsCategories = await this.$axios.$get('/postscategory/' + payload.id + '.json') commit('setPostsCategories', postsCategories) }, async postsCategories({ commit }) { const postsCategories = await this.$axios.$get('/postscategory.json') commit('setPostsCategories', postsCategories) }, }

####テンプレートファイルの記述

html

<template> <section class="container posts-page"> <multiselect :selected="selected" :options="options" :multiple="true" @update="updateSelected" v-model="payload.categories" placeholder="カテゴリー選択"></multiselect > <ul> <li v-for="(cat,index) in postsCategories" :key="index">{{ cat.name }}</li> </ul> </section> </template> <script> import { mapGetters } from "vuex"; import Multiselect from "vue-multiselect"; export default { components: { Multiselect }, data() { return { selected: null, options:[] }; }, methods: { updateSelected(newSelected) { this.selected = newSelected; } }, mounted() { const cat = this.$store.state.posts.postsCategories; console.log(cat); for (var value in cat) { this.options.push(value); } }, created() { this.$store.dispatch("posts/postsCategories"); }, computed: { ...mapGetters("posts", ["postsCategories"]) } }; </script>

出来ていること

  • 目的とするページに遷移をするとcreatedが作動、store/post.jsのpostsCategoriesという名のstateに格納しております。値はオブジェクトとして格納しております。
  • computedのmapGettersでpostsCategoriesを getter関数として取得し、htmlにレンダリング可能です。

#実現したいこと

  • multiselectという子コンポーネントにprops要素としてoptionsを設けております。渡す値をpostsCategoriesの"name"を基にした配列を入れたい。
  • postsCategoriesはオブジェクトであるので配列に変換しなければならない。
  • postsCategoriesの中身はこんな感じである  { "nuxt": { "name": "Nuxt.js", "slug": "nuxt" }, "laravel": { "name": "Laravel", "slug": "laravel" }, "wp": { "name": "wordPress", "slug": "wp" }}
  • mapGettersでgetterとして、postsCategoriesは取得しております、このpostsCategoriesをsetter関数として使うことはできるのか。

##試したこと
mountedにセットしようとしてみましたが、値はセットされませんでした。

mounted() { const cat = this.$store.state.posts.postsCategories; console.log(cat); for (var value in cat) { this.options.push(value); } },

上記の経験から、store.state値をどのようにsetterとして使えばよいのか、悩みだしました。
そもそもの考え方が違うのではないのかとも悩み始めております。

vue.js,vuexに詳しい方がいらっしゃいましたら、是非とも教えていただきたいです。
よろしくお願いいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Vue.js

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

Nuxt.js

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

Vuex

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。