前提・実現したいこと
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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/23 13:52