【質問内容】
Nuxtでの開発で、編集画面機能の元データを、store.stateから引っ張ってくる際、
そのデータを<input v-model>すると、フォームの値を変更するときに
[vuex] do not mutate vuex store state outside mutation handlers.
というエラーがでてしまいます。
元データは、id検索で、store.getters内のメソッドで取得しております。
一度、const hoge に格納しているので、バインディングはされていないと思ったのですが、うまくいきません。
そして、なぜか、
store/index.jsのコードの先頭に、
js
1export const strict = false
と追記すると、このエラーは消えます。
そもそも、編集画面でv-modelするデータを、store.stateから検索して取得するというロジックが間違っているのでしょうか??
これをfirestore側から1件取得・・・というのは、非同期処理で実現できると思いますが、
なんだか不自然な気がしております。
この問題の解決策がわかる方おりましたら、ご教示頂けたら助かります。
よろしくお願いいたします。
---
◆開発環境(機能:事故データ管理システムのCRUD機能)
- Vue(Nuxt.js、Vuetify)
- Vuex
- CloudFireStore
以下のような構成で、編集ページの機能を持たせようとしております。
【機能構成】
index.vue (事故データ一覧表示)
↓ どれか1つの「編集ボタン」クリック
_id.vue (idに紐づくデータをstoreよりひっぱり、フォームに復元、編集できるようにする)
コードのロジックとしては、以下に記載の通りです。
vuex
1/* store/accidents.js */ 2 3export const state = () => ({ 4 accidents: [], //事故一覧のデータ、idや日時、ユーザー名など格納 5}) 6 7export const getters = { 8 // 編集用のデータをstate.accidentsからID検索取得 9 getAccidentById: (state) => (id) => { 10 return state.accidents.find(accident => accident.id === id) 11 }, 12} 13
vue
1// vue単一コンポーネント( データ編集画面機能 ) 2// edit/_id.vue 3<template> 4 <div> 5 <input v-model='accident_data.user_name' type="text"> 6 <input v-model='accident_data.accident_place' type="text"> 7 <button @click='registFunction'>登録</button> 8 </div> 9</template> 10 11 12export default { 13 created() { 14 const accident = this.$store.getters['accidents/getAccidentById'](this.$route.params.id) 15 // IDに紐づくデータが取得できた場合、this.accident_data(v-model用変数)に代入 16 if(accident) { 17 this.accident_data = accident 18 } else { 19 this.$router.push({ name: 'index' }) 20 } 21 }, 22 data: function() { 23 return { 24 accident_data: {}, 25 } 26 } 27} 28
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。