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

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

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

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

Vuex

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

Q&A

解決済

1回答

981閲覧

Vuexでmutations内の関数に引数を渡したい

bokupiroki

総合スコア54

Vue.js

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

Vuex

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

0グッド

0クリップ

投稿2022/01/20 09:19

前提・実現したいこと

Vue.jsのVuexを学習中
mutations: { }内に関数を作成している
その関数をVue側から呼び出す際、引数を渡したい
渡す引数は1つだけ

最終的にはvuexのstateの情報を動的に書き換えたい

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

vueファイルから適当な文字列を引数に入れて渡しても、
vuex側console.logすると意図しない値が出てきます。

該当のソースコード

↓Hoge.vue

javascript

1<template> 2 <div id="app"> 3 <h1>{{ $store.state.message }}</h1> 4 <h2>{{ $store.state.email }}</h2> 5</template> 6<script> 7 export default { 8 mounted() { 9 this.$store.commit("update"); 10 this.$store.commit("updateUser",'changed@gmail.com') 11 }, 12 computed: { 13 14 }, 15 methods: { 16 17 } 18 }; 19</script>

↓resources\js\store\index.js

javascript

1import Vue from "vue"; 2import Vuex from "vuex"; 3 4Vue.use(Vuex); 5 6const store = new Vuex.Store({ 7 state: { 8 message: '元のメッセージ', 9 email: 'default@gmail.com' 10 }, 11 mutations: { 12 update() { 13 this.state.message = '書き換え後のメッセージ' 14 }, 15 updateUser(fuga) { 16 console.log(fuga)//←この時点でchanged@gmail.comじゃない値が返る 17 18 var hoge = JSON.parse(JSON.stringify(fuga)) 19 console.log(hoge) 20 this.state.email = hoge 21 } 22 } 23}, ); 24export default store; 25

index.jsのconsole.log(fuga)の時点で、

email: Object
email: "default@gmail.com"
message: "書き換え後のメッセージ"

というオブジェクトが返ってきてしまいます。

Hoge.vueでは、this.$store.commit("updateUser",'changed@gmail.com')と書いているので、
単純に文字列のchanged@gmail.comをindex.js側で受け取れるはずなのでは??
と思うのですが、同index.jsで定義したstateの内容がオブジェクトとして渡されてしまいます。

試したこと

vue側ででmountedの中に書くこと自体がよくないのか?
と考え、computedやmethodsに書いて呼び出すことも試しましたが、結果は同じでした。

そもそも的外れなことをしていたら申し訳ありません。
知恵を貸していただけると幸いです。

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

Vue2

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

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

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

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

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

guest

回答1

0

ベストアンサー

Vuexのmutationsのハンドラ(関数)の第一引数はcommitした値ではなく state です。
commitした値は第二引数として渡されます。

javascript

1const store = new Vuex.Store({ 2 state: { 3 message: '元のメッセージ', 4 email: 'default@gmail.com' 5 }, 6 mutations: { 7 updateUser(state, newEmail) { 8 state.email = newEmail 9 } 10 } 11}, );

公式サイトのこちらを確認されるといいと思います。

投稿2022/01/21 15:52

NozomuIkuta

総合スコア1260

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

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

bokupiroki

2022/01/23 13:52

解決しました! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問