前提
プログラミング初学者です。
Nuxt.js +firebaseで記事投稿システムを作っています。
記事投稿後の編集機能を実装中に行き詰まった箇所の質問になります。
実現したいこと
・storeからgettersで取得したオブジェクトデータをinputタグで初期値として表示し、文字編集後store側にdispatchしていきたい。
発生している問題・エラーメッセージ
computedで取得したデータが上手くHTML側で表示ができない。
該当のソースコード
edit.vue
1<template> 2 <section class="container posts-page"> 3 <el-card style="flex: 1"> 4 <div class="clearfix"> 5 <el-input 6 value="post.title" 7 placeholder="タイトルを入力" 8 v-model="formData.title" 9 /> 10 </div> 11 <div> 12 <el-input 13 placeholder="本文を入力……" 14 type="textarea" 15 rows="15" 16 v-model="formData.body" 17 /> 18 </div> 19 <div class="text-right" style="margin-top: 16px"> 20 <el-button type="primary" @click="publishPost" round> 21 <span class="el-icon-upload2" /> 22 <span>Publish</span> 23 </el-button> 24 </div> 25 </el-card> 26 </section> 27</template> 28<script> 29export default { 30 layout: "after-login", 31 async asyncData({ store, route, error }) { 32 const id = route.params; 33 console.log(id); 34 try { 35 await store.dispatch("posts/getPost", { 36 postId: id.postId, 37 uid: id.uid, 38 }); 39 } catch (e) { 40 error({ statusCode: 404 }); 41 } 42 }, 43 computed: { 44 formData() { 45 return this.$store.getters["posts/selectPost"]; 46 }, 47 48 49 uid() { 50 return this.$store.getters.user.uid; 51 }, 52 name() { 53 return this.$store.getters.user.name; 54 }, 55 photoURL() { 56 return this.$store.getters.user.photoURL; 57 }, 58 }, 59 methods: { 60 61 publishPost() { 62 this.$store.dispatch("posts/publishPost", { 63 photoURL: this.photoURL, 64 name: this.name, 65 uid: this.uid, 66 title: this.formData.title, 67 body: this.formData.body, 68 }); 69 this.title = ""; 70 this.body = ""; 71 }, 72 }, 73}; 74</script>
posts/index.js
1export const state = () => ({ 2 3 selectPost: [], 4}); 5 6export const getters = { 7 8 selectPost: (state) => { 9 return state.selectPost; 10 }, 11}; 12 13export const mutations = { 14 setPost(state, data) { 15 state.selectPost = data; 16 }, 17}; 18 19export const actions = { 20 21 async getPost({ commit }, payload) { 22 try { 23 console.log(payload.postId); 24 const querySnapshot = await this.$fire.firestore 25 .collection("posts") 26 .where("postId", "==", payload.postId) 27 .get(); 28 29 const selectPost = []; 30 querySnapshot.forEach((doc) => { 31 const data = doc.data(); 32 console.log(data); 33 selectPost.push(data); 34 }); 35 console.log(selectPost); 36 commit("setPost", selectPost); 37 } catch (error) { 38 console.log(error); 39 } 40 }, 41 42 async publishPost({ dispatch }, payload) { 43 const collection = this.$fire.firestore.collection("posts"); 44 const newId = collection.doc().id; 45 46 try { 47 await collection.doc(newId).set({ 48 postId: newId, 49 photoURL: payload.photoURL, 50 name: payload.name, 51 uid: payload.uid, 52 title: payload.title, 53 body: payload.body, 54 time: this.$fireModule.firestore.FieldValue.serverTimestamp(), 55 }); 56 // console.log(uid); 57 // console.log(title); 58 // console.log(body); 59 dispatch("getPosts"); 60 } catch (error) { 61 // console.log(title); 62 console.log(error); //eslint-disable-line 63 console.log(payload); //eslint-disable-line 64 } 65 }, 66
試したこと
getとsetを使用して取得と送信を行うと考えているのですが、実装が上手くいきませんでした。
titleとbodyをstore側でまとめてデータ取得していますが、1項目ずつ取得した方が上手くいくのか、現在の方法でも実装が可能か教えていただけると幸いです。
よろしくお願いします
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。