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

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

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

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

Vuex

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

Vue CLI

Vue CLIは、Vue.jsでアプリケーション開発を行うためのコマンドラインインタフェース(CLI)に基づいた開発ツールです。インタラクティブなプロジェクトの雛形や設定なしで使用できるプロトタイプの作成など、さまざまな機能が用意されています。

JavaScript

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

Q&A

0回答

1383閲覧

vuexのmapGettersやmapActionsで、設定値に変数を使用したい

nutti

総合スコア7

Vue.js

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

Vuex

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

Vue CLI

Vue CLIは、Vue.jsでアプリケーション開発を行うためのコマンドラインインタフェース(CLI)に基づいた開発ツールです。インタラクティブなプロジェクトの雛形や設定なしで使用できるプロトタイプの作成など、さまざまな機能が用意されています。

JavaScript

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

0グッド

0クリップ

投稿2021/04/28 09:25

編集2021/04/29 00:12

前提・実現したいこと

Vue.js初心者です。不足事項などがありましたら追記いたしますのでお申し付けください。
よろしくお願いいたします。
文章が下手なので、先にソースを見ていただけた方がわかりやすいかもしれません。。。

Vueのコンポーネントで、親から呼ばれた子のコンポーネント内で設定値をvuexへ保存したいのですが
その際に、親からのvuexの情報を受け取り、その情報を元に保存する先を変更したいと考えました。
やりたい構造が下記の通りです。

  1. 親のコンポーネントで今回呼び出したい共通部品のコンポーネントを呼び出します。
  2. 呼び出す際に、porpsなどでvuexの保存先(どのモジュールに保存するか)情報を子コンポーネントへ渡します。
  3. もらった情報を...mapGetter...mapActionsの第一引数に入れてあげて保存先を選択する

子のコンポーネン内(Chidlコンポーネント)では、ボタン(Buttonコンポーネント)などが実装されており、その状態結果を親からもらった保存先情報を元にvuexのモジュール先を選択して保存します。

該当のソースコード

親コンポーネント

vue

1<template> 2 <div> 3 <Child :storeName="'storeA'" :id="'AA'" :text="'ストア1'" /> 4 <Child :storeName="'storeB'" :id="'BB'" :text="'ストア2'" /> 5 <Child :storeName="'storeC'" :id="'CC'" :text="'ストア3'" /> 6 </div> 7</template> 8<script> 9export default { 10 ...vueの諸々の処理 省略 11} 12</script>

子のコンポーネント Child.vue

vue

1<template> 2 <div class="c-btnAndText"> 3 <Button v-model="btnState" /> 4 <span v-text="text"></span> 5 </div> 6</template> 7<script> 8import { mapGetters, mapMutations, mapActions } from "vuex" 9import Button from '@/components/button.vue' 10 11export default { 12 name: 'Child', 13 data: () => { 14 return { 15 state: false, 16 } 17 }, 18 components: { 19 Button, 20 }, 21 props: { 22 storeName: String, 23 title: String, 24 id: String, 25 }, 26 computed: { 27 // 下記がthis.storeNameではなく、直接 storeA と書くとうまく行くがpropsの値だとうまくいかない 28 ...mapGetters(this.storeName, [ 29 'getItem', // storeA~Cの中にそれぞれある共通getter 30 ]), 31 btnState: { 32 get() { 33 return this.state 34 }, 35 set(value) { 36 this.state = value 37 } 38 }, 39 }, 40 watch: { 41 state: { 42 handler: function(nv, ov) { 43 this.setItem(this.id, this.state) 44 }, 45 deep: true, 46 } 47 }, 48 methods: { 49 ...mapActions(this.storeName, [ 50 'setItem', 51 ]), 52 }, 53} 54</script>

storeの構造

js

1import Vue from 'vue' 2import Vuex from 'vuex' 3import storeA from './storeA' 4import storeB from './storeB' 5import storeC from './storeC' 6 7Vue.use(Vuex) 8export default new Vuex.Store({ 9 state: {}, 10 mutations: { 11 }, 12 actions: { 13 }, 14 modules: { 15 storeA: storeA, 16 storeB: storeB, 17 storeC: storeC, 18 }, 19})

importした先のstoreA~Cの構造

storeディレクトリ |- index.js |- storeA --|- index.js --|- actions.js --|- getters.js --|- mutations.js ... storeB ~ Cも同様

発生している問題・エラーメッセージ

色々試して、propsで値を渡し、受け取った値を...mapGettersの設定値に使用したくてもundefinedのエラーがでてうまくいきません。
発生箇所は下記コードの、this.storeNameの部分がうまくいきません。
変数ではなく、'storeA'のように直接書くとうまくいきます。

# やってみたこと
上記のソースのような感じで、
...mapGettersや、...mapActionsの第一引数でpropsの値を入れてみたのですがうまく動きませんでした。
今回のような、ボタンと文章という使いまわせるコンポーネントがあり、その設定情報を指定したstoreに保存したいのですが
うまくいかず、色々調べてcomputedなどで値を指定するなど試行錯誤してみたのですが、結果が出なく質問させていただきました。

聞きたいこと

  1. そもそもこのように...mapGetters...mapActionsのストアのmoduleを選択する引数へ、変数を設定し、保存先を分けてあげることができるのか -> できない場合は、全部のパターンのコンポーネントをそれぞれ作る必要があるのでしょうか?
  2. 現状のコードの方向性はあっているのか、間違っているのか。(第一引数へ変数をいれて振り分ける)
  3. 可能である場合、どう言った方法があるのか

になります。

不足事項や間違いなどありましたら、修正追記いたしますので教えていただけると幸いです。
何卒よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問