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

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

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

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

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

Vuex

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

JavaScript

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

Q&A

0回答

1258閲覧

NuxtでStoreを用いたフォーム実装方法ではまってます。

matsuo_basho

総合スコア88

Vue.js

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

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

Vuex

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

JavaScript

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

0グッド

0クリップ

投稿2020/12/28 05:20

いつもお世話になっております。

Nuxtにてstoreを利用した際のフォーム入力挙動について質問です。

以下のデータをサーバーから取得し、そのデータを編集したいです。

{ "id": "a233170f-119a-4589-9c10-88fc1a72b332", "title": "首相、来秋の総裁選出馬明言せず", "content": "菅義偉首相は27日放送のBSテレ東番組で、来年秋の自民党総裁選に立候補するかどうかを問われ、明言を避けた。「一日一日、着実に仕事をしていくことに尽きる」と語った。衆院解散・総選挙についても「約束した仕事は、きちんとやり遂げたい」と述べ、具体的な時期には言及しなかった。\r\n\r\n【動画】首相、飲食店時間短縮へ罰則検討\r\n\r\n 新型コロナウイルス感染症が急拡大する中、自身の年末年始の過ごし方について「危機管理の責任者だった官房長官時代の習癖がなかなか取れない。首相になっても、何か仕事をしていた方が落ち着く」と話した。\r\n\r\n 延期している中国の習近平国家主席の国賓来日に関しては「現時点で日程調整する状況ではない」とした。" }

行いたい処理の流れ

  1. サーバーから上記のデータを取得。
  2. 1で取得したデータをStoreのstateに保存。
  3. 2でStoreのstateに保存したデータをtemplate側で表示&編集。
  4. 3の挙動を v-model のようにリアルタイムでStoreのstateに反映。

ハマってる点

・上記「行いたい処理の流れ」における3,4で、inputで入力したデータをmutationsを介して編集することができません。
・v-modelで直接stateを編集することはできるようですが、当然mutationsを介して変更するようにとエラーがでます。

課題(と個人的に捉えている点)

・受け取ったデータがオブジェクト型なので、それに合わせた記述方法。
・以下のソースコードにおいて、stote/blogs.jsのnutationsのupdatePost()で受け取ったフォームのデータをどのようにstate.postに追加すれば良いか。

参考にした記事

https://vuex.vuejs.org/guide/forms.html

ソースコード(pages側の方は3パターン記述します)

javascript

1/* store/blogs.js */ 2 3export const state = () => ( { 4 5 post: "", 6 7} ) 8 9 10export const getters = { 11 12 post: ( state ) => state.post, 13 14} 15 16 17export const mutations = { 18 19 setPost( state, {post} ){ 20 state.post = post 21 }, 22 23 updatePost( state, e ){ 24 console.log( e ); 25 state.post = post 26 }, 27 28} 29 30 31export const actions = { 32 33 async fetchPost( {commit} ){ 34 35 const post = await this.$axios.$get( `/api/v1/blog/a233170f-119a-4589-9c10-88fc1a72b332` ) 36 37 commit( 'setPost', {post} ) 38 39 }, 40 41}

html

1/* pages/index.vue - パターン1 */ 2 3<template> 4 <div class="container"> 5 6 <input v-model="post.title"> 7 8 <hr> 9 10 {{ post.title }} 11 12 </div> 13</template> 14 15<script> 16export default { 17 18 async asyncData( {store, error} ){ 19 try { 20 await store.dispatch( 'blogs/fetchPost' ) 21 } catch(e) { 22 error( {statusCode: 404} ) 23 } 24 }, 25 26 computed: { 27 28 post: { 29 title: { 30 31 get(){ 32 return this.$store.getters['blogs/post'] 33 }, 34 set( value ){ 35 this.$store.commit( 'blogs/updatePost', value ) 36 } 37 38 } 39 }, 40 41 }, 42 43}

html

1/* pages/index.vue - パターン2 (computed:postの部分が1と異なります) */ 2 3<template> 4 <div class="container"> 5 6 <input v-model="post.title"> 7 8 <hr> 9 10 {{ post.title }} 11 12 </div> 13</template> 14 15<script> 16export default { 17 18 async asyncData( {store, error} ){ 19 try { 20 await store.dispatch( 'blogs/fetchPost' ) 21 } catch(e) { 22 error( {statusCode: 404} ) 23 } 24 }, 25 26 computed: { 27 28 post: { 29 30 get(){ 31 return this.$store.getters['blogs/post'] 32 }, 33 set( value ){ 34 this.$store.commit( 'blogs/updatePost', value ) 35 } 36 37 }, 38 39 }, 40 41}

html

1/* pages/index.vue - パターン3 */ 2 3<template> 4 <div class="container"> 5 6 <input :value="post.title" name="title" @input="updatePost"> 7 8 <hr> 9 10 {{ post.title }} 11 12 </div> 13</template> 14 15<script> 16import { mapGetters } from 'vuex' 17 18export default { 19 20 async asyncData( {store, error} ){ 21 try { 22 await store.dispatch( 'blogs/fetchPost' ) 23 } catch(e) { 24 error( {statusCode: 404} ) 25 } 26 }, 27 28 computed: { 29 ...mapGetters( 'blogs', [ 30 'post', 31 ] ), 32 }, 33 34 methods: { 35 updatePost( e ){ 36 this.$store.commit( 'blogs/updatePost', e ) 37 }, 38 }, 39 40} 41</script>

以上となりますが、どなたかNuxtに詳しい方がいらっしゃったらご教授いただけますと幸いです..。
それではどうぞ宜しくお願い致します。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問