【发布时间】:2023-01-09 21:27:36
【问题描述】:
我有一个 nuxt.js 项目:https://github.com/AzizxonZufarov/newsnuxt2 我需要每分钟从 API 更新帖子而不加载页面: https://github.com/AzizxonZufarov/newsnuxt2/blob/main/pages/index.vue
我怎样才能做到这一点?
请帮助结束代码,我已经为此功能编写了一些代码。 我也有这个强制更新按钮。它也不起作用。它将帖子添加到以前的帖子。这不是我想要的,我需要在单击它时强制更新帖子。
这是我到目前为止所拥有的
<template>
<div>
<button class="btn" @click="refresh">Force update</button>
<div class="grid grid-cols-4 gap-5">
<div v-for="s in stories" :key="s">
<StoryCard :story="s" />
</div>
</div>
</div>
</template>
<script>
definePageMeta({
layout: 'stories',
})
export default {
data() {
return {
err: '',
stories: [],
}
},
mounted() {
this.reNew()
},
created() {
/* setInterval(() => {
alert()
stories = []
this.reNew()
}, 60000) */
},
methods: {
refresh() {
stories = []
this.reNew()
},
async reNew() {
await $fetch(
'https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty'
).then((response) => {
const results = response.slice(0, 10)
results.forEach((id) => {
$fetch(
'https://hacker-news.firebaseio.com/v0/item/' +
id +
'.json?print=pretty'
)
.then((response) => {
this.stories.push(response)
})
.catch((err) => {
this.err = err
})
})
})
},
},
}
</script>
<style scoped>
.router-link-exact-active {
color: #12b488;
}
</style>
【问题讨论】:
-
你想在这里做什么?仅限 SPA、SSR 还是 SSG?并非所有这些都与您想要的兼容。此外,定义“更新帖子”,您是希望用户手动刷新页面 (F5) 还是获取它? SEO在这里很重要吗?
-
@kissu 仅限 SPA。没有 ssr 或 ssg。我想要这样:必须获取每一分钟的帖子,而无需使用 setInterval 以编程方式刷新页面本身。搜索引擎优化并不重要。
-
@kissu 我还有一个类 btn 的按钮。我需要通过单击手动获取帖子。
-
@kissu 这意味着我将拥有 2 个功能:每个 mnute 帖子本身都会一次又一次地获取;其次,当用户手动单击按钮时,将获取帖子。
-
如果是SPA,那肯定是可行的。
this.mounted不是 Nuxt 中的东西。我建议您使用refresh()。此外,请使用fetch()生命周期挂钩而不是mounted,因为您使用的是 Nuxt。您可以通过单击按钮或尝试使用setInterval来调用refresh()方法。就您的进度和调试过程,请在这里分享一些代码。要求人们只修复你的 GitHub 存储库并不是这个平台的工作方式。如果你尽自己的一份力量,我很乐意帮助你。
标签: vue.js nuxt.js nuxtjs3 hacker-news-api