【发布时间】:2021-07-10 01:50:59
【问题描述】:
我需要为我的 NUXT 站点上的多个组件获取持续更新的 API 端点数据,其中 2 个在任何给定时刻同时可见。我想知道同时为几个可见的不同组件轮询同一端点的最佳做法是什么?
目前,我正在使用 VUEX 将 API 数据发送到我的组件,然后使用带有刷新功能的 setInterval 来更新每个组件中的数据。这显然是一个笨拙的解决方案(我是初学者)。我正在考虑直接在 VUEX 中轮询 API,但我知道这也不可取。
这是我目前(笨拙)的解决方案:
VUEX:
// STATE - Initial values
export const state = () => ({
content: {}
});
// ACTIONS
export const actions = {
async nuxtServerInit ({ commit }) {
const response = await this.$axios.$get('https://public.radio.net/stations/see15310/status');
commit('setContent', response)
}
}
// MUTATIONS
export const mutations = {
setContent(state, content) {
state.content = content;
}
}
在每个组件中:
computed: {
content () {
return this.$store.state.content
},
methods: {
refresh() {
this.$nuxt.refresh()
}
},
mounted() {
window.setInterval(() => {
this.refresh();
}, 5000);
【问题讨论】:
-
适合您的用例的正确解决方案是在服务器上设置SSE。您的应用程序订阅它并提交每个收到的事件。任何渲染的组件都会对状态变化做出反应。这样,如果 2 天没有发生任何变化,您的应用程序中也不会发生任何变化。如果您每秒钟都收到一个事件,那么您不会错过任何一个事件。