前提・実現したいこと
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
あなたの回答
tips
プレビュー