亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Die Ausführungsreihenfolge der VueJS-Planungsfunktionen verursacht Probleme
P粉412533525
P粉412533525 2024-04-06 10:37:58
0
1
892

Ich versuche, eine Liste von Ankündigungen (von der API abgerufen) auf einer Seite anzuzeigen. Ich verwende einen Vuex-Store und habe einen Status namens Announcement. Ich m?chte auch, dass diese Liste jedes Mal aktualisiert wird, wenn der Benutzer die Seite aktualisiert/betritt. Deshalb habe ich Lifecycle-Hooks verwendet, insbesondere Mounted(). Ich habe eine Versandfunktion, die eine Club-ID als Parameter akzeptiert. Das Problem ist, dass ich versuche, auf das Ankündigungs-Array in der Vue-Komponente zuzugreifen, und es ist einen Schritt langsamer als die Version im Vuex-Store.

Der folgende Inhalt befindet sich in der Vue-Komponente ClubDetails.vue

name: "ClubDetails",
  data(){
    console.log("inside data")
    return {
      club_id: this.$route.params.clubID,
      announcements: this.$store.state.ClubDetails.announcements
    }
  },
  mounted() {
      this.$store.dispatch('ClubDetails/getAnnouncements', this.club_id)
      console.log("After dispatch function")
  },

Das ist mein ShopClubDetails.js

namespaced: true,
    state: {
        announcements: [],
    },
    mutations: {
        setAnnouncements(state, newArr) {
            state.announcements = newArr
            console.log("Inside Mutation")
        },
    },
    actions: {
        async getAnnouncements({ commit, state }, club) {
            const params = new URLSearchParams([
                ['clubId', club]
            ]);
            await axios.get("http://127.0.0.1:8000/api/announcements", { params }).then(res => {
                console.log("inside dispatch function")
                commit('setAnnouncements', res.data)

            }).catch(err => {
                console.log(err)
            })
        },
    },
    getters: {
        getAllAnnouncements(state) {
            return state.announcements;
        }
    },
};

Nach der Druckanweisung entspricht die Ausführungsreihenfolge nicht meinen Erwartungen

Die Reihenfolge, die ich erwarte, ist diese: interne Daten –> interne Mutation –>

Ein weiteres Problem besteht darin, dass ich beim Aktualisieren der Seite erwarte, dass mount() erneut aufgerufen wird und das Array aktualisiert und erneut angezeigt wird, aber wenn ich die Seite aktualisiere, verschwinden alle Inhalte des Arrays

P粉412533525
P粉412533525

Antworte allen(1)
P粉025632437

這是因?yàn)?this.$store.dispatch('ClubDetails/getAnnouncements', this.club_id) 正在對(duì)服務(wù)器做出響應(yīng)并且是異步的,并且需要時(shí)間從服務(wù)器獲取公告。而 console.log("Afterdispatch function") 在從服務(wù)器收到響應(yīng)之前執(zhí)行。

這就是為什么您首先看到后調(diào)度函數(shù),然后再看到內(nèi)部調(diào)度函數(shù)。

嘗試像這樣在調(diào)度之前放置等待。

async mounted() {
      await this.$store.dispatch('ClubDetails/getAnnouncements', this.club_id)
      console.log("After dispatch function")
  },

你應(yīng)該返回axios.get方法,因?yàn)樗且粋€(gè)Promise,不需要同時(shí)使用await和then。您還可以從 getAnnouncements 中刪除異步,因?yàn)槟辉偈褂玫却?/p>

getAnnouncements({ commit, state }, club) {
            const params = new URLSearchParams([
                ['clubId', club]
            ]);
            return axios.get("http://127.0.0.1:8000/api/announcements", { params }).then(res => {
                console.log("inside dispatch function")
                commit('setAnnouncements', res.data)

            }).catch(err => {
                console.log(err)
            })
        },
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage