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

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

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

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

Vuex

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

JavaScript

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

Q&A

0回答

745閲覧

Nuxtのstoreの共通の処理をまとめたい

Stylemiya

総合スコア8

Nuxt.js

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

Vuex

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

JavaScript

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

0グッド

1クリップ

投稿2021/01/20 22:23

前提・実現したいこと

Nuxtを(javascript自体も)勉強しはじめの者です。
Nuxtでフロントエンド、Laravelをバックエンドにして
業務管理システムを作っています。

顧客一覧や、商品一覧、注文一覧を作成する為、storeからAPIでデータを取得しようとしています。

例えば、顧客データ用のstoreを該当のコードのように作成しました。
商品や注文も、store内の処理は全て同じで問題ないのですが、その場合、

商品(product)や注文(order)はそれぞれ、store/product.js、store/order.jsとして作成した方が良いのでしょうか?
もしその場合、共通の処理はどのように書けばよいのでしょうか?

質問が不慣れで、足りない情報もあるかもしれませんが、何卒よろしくお願いいたします。

該当のソースコード

js

1// store/customer.js 2 3export const state = () => ({ 4 items: {}, 5 item: {}, 6}) 7 8export const getters = { 9 list(state) { 10 return state.items 11 }, 12 show(state) { 13 return state.item 14 }, 15} 16 17export const mutations = { 18 set(state, response) { 19 state.items = response 20 }, 21 show(state, response) { 22 state.item = response 23 }, 24 update(state, data) { 25 state.items.data.forEach((item, index) => { 26 if (item.id === data.id) { 27 state.items.data.splice(index, 1, data) 28 } 29 }) 30 }, 31 store(state, data) { 32 state.items.data.unshift(data) 33 }, 34 destroy(state, id) { 35 state.items.data.forEach((item, index) => { 36 if (item.id === id) { 37 state.items.data.splice(index, 1) 38 } 39 }) 40 }, 41} 42 43export const actions = { 44 async search({ commit }, query) { 45 const response = await this.$axios 46 .$post(`/server/api/${this.app.context.params.slug}/search`, query) 47 .catch((err) => { 48 console.log(err) 49 }) 50 commit('set', response) 51 }, 52 async show({ commit }, query) { 53 const response = await this.$axios 54 .$get(`/server/api/${this.app.context.params.slug}/${query}`) 55 .catch((err) => { 56 console.log(err) 57 }) 58 commit('show', response) 59 }, 60 async update({ commit }, item) { 61 const response = await this.$axios 62 .$patch(`/server/api/${this.app.context.params.slug}/${item.id}`, item) 63 .catch((err) => { 64 console.log(err) 65 }) 66 commit('update', response) 67 }, 68 async store({ commit }, item) { 69 const response = await this.$axios 70 .$post(`/server/api/${this.app.context.params.slug}`, item) 71 .catch((err) => { 72 console.log(err) 73 }) 74 commit('store', response) 75 }, 76 async destroy({ commit }, item) { 77 const response = await this.$axios 78 .$delete(`/server/api/${this.app.context.params.slug}/${item.id}`) 79 .catch((err) => { 80 console.log(err) 81 }) 82 commit('destroy', response) 83 }, 84} 85

試したこと

1、上記コードをコピペした。ほぼ思い通りの動作になりましたが、処理が全く同じなので、まとめ方を模索しておりました。そもそもその考え方が間違っている??

2、store/common.js などを作って、各ページ同じstoreファイルを使用するようにしてみました。
stateも共通のため、ページを遷移する度に、APIから取得してきて再描画するかたちになってしまいました。
やはりデータはそれぞれ保持した方がよいですよね?

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

ここにより詳細な情報を記載してください。

nuxt 2.14.6
Laravel 8.21.0

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

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

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

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

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

plasticgrammer

2021/01/21 00:50

保持させている items、item は画面間で共有させるケースはあるのでしょうか? 共有させる必要がないなら、actionsの各関数からpromiseオブジェクト($getや$postの返り値)を返して、各処理で例外とデータ受け取りを実装したほうが自然かと思いました。
Stylemiya

2021/01/21 04:26

ご返信ありがとうございます。知識が薄く、actionsから、ミューテーションでstateにセットするまでが普通なのだと思っていました。間違っていたら申し訳ありませんが、state に セットしないという事でしょうか?
plasticgrammer

2021/01/21 04:46

> state に セットしないという事でしょうか? その理解であっています。 ですが、その場合はわざわざstoreを使う必要もないので、少し訂正と補足をさせてください。 実際には以下のようなイメージです。 1) axiosを使用した処理を共通化 2) storeから1)を利用して取得したデータをstoreに保持  ※保持する必要がないのであれば、ビュー側の処理から直接1)を利用 1)については下記サイトにあるコードのようなイメージです。 https://qiita.com/itouuuuuuuuu/items/4132e3b7ddf2cbf02442
Stylemiya

2021/01/21 12:45

ありがとうございます。参考にしてみます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問