当前位置: 首页 > 科技观察

一个快速的Vue3无限滚动组件

时间:2023-03-16 10:29:16 科技观察

.post{background:#fff;填充:1.5em;}.post:not(:last-child){border-bottom:1pxsolid#ddd;}.posth2{字体大小:1.3em;填充底部:0.25rem;}.postp{颜色:#888;}如果你在社交媒体上花费太多时间,你很可能正在使用一个使用无限滚动组件的网站。无限滚动组件会在用户向下滚动页面时加载新内容,而不是将其拆分为多个页面。它们非常适合某些类型的内容,例如用户生成的内容。下面是一个无限滚动的例子。在今天的教程中,我们将使用CompositionAPI创建一个Vue3无限滚动组件。这是我们将在它结束时构建的内容的预览。如您所见,它是无限滚动,屏幕右侧的滚动条反映了这一点。现在,让我们看一下这个组件的实现。为什么还要使用无限滚动组件?我们都见过使用无限滚动来显示其内容的网站示例,但是什么时候使用它并且它比使用典型的分页系统效果更好?大家可以看看我之前分享过的一篇文章《无限滚动与分页哪个用户体验更好?如何正确使用它们》,在这里,我只是简单总结一下他们的不足。无限滚动的优点:用户参与和内容发现滚动优于点击(可用性更好)滚动适用于移动设备与Web开发有关的一切,都有充分的理由选择任何一个选项。请务必考虑哪个最适合您的项目!无论如何,学习如何构建Vue3无限滚动组件很有趣并且可能对您有用。首先,让我们从较高的层面回顾一下系统的工作原理。主要分为三个部分:生成内容的模拟API调用PostComponent呈现单个包含所有内容组件的contentListComponent并处理从API加载内容1.模拟API调用在本教程中,我们将编写一个虚拟API调用,它返回硬编码数据。重要的是,如果您在真实的后端和数据库中实现它,您可以决定根据数据库中的大小和位置以某种方式限制您的结果。这个API调用可以是任何东西,从简单应用程序中的简单数据库查询一直到更高级应用程序中的复杂推荐算法。以下是社交媒体网站常用的内容加载算法的一些不同想法:发布日期与当前用户在帖子上的活动但是,为了简单起见,我们的算法将只生成随机帖子数据并根据给定参数加载它返回X帖子.varnames=['MattMaribojoc','LebronJames','BillGates','ChildishGambino']//用于为本教程生成帖子constgetPosts=(number)=>{//生成多个帖子//在真实环境中,这将是一个数据库调用或算法letret=[]for(vari=0;i

{{post.author}}

{{post.content}}

.post{background:#fff;填充:1.5em;}.post:not(:last-child){border-bottom:1pxsolid#ddd;}.posth2{字体大小:1.3em;填充底部:0.25rem;}.postp{颜色:#888;}3.显示我们的内容接下来,让我们实际弄清楚如何在屏幕上显示一些帖子。这是ListComponent.vue组件派上用场的地方。如果您没有任何Vue3经验,您可能会觉得这段代码有点奇怪。但是请查看此Vue3入门指南。简而言之,Vue3将OptionsAPI替换为CompositionAPI,这意味着代码(生命周期挂钩、数据等)全部组织在一个设置方法中。所以首先,我们要导入一些东西:我们的API调用我们的PostComponent引用来创建响应式数据onMounted和onUnmounted访问这些生命周期挂钩。importPostComponentfrom'./PostComponent.vue'import{ref,onMounted,onUnmounted}from'vue'importgetPostsfrom'../scripts/post-loader'接下来,在我们的设置方法中,我们要设置一个Reactive内容变量调用我们的getPostsAPI调用。不要忘记归还它,以便我们的模板可以访问它!setup(){constposts=ref(getPosts(10))return{posts,}}最后,为了在模板中显示我们的数据,我们想要运行一个v-for循环来迭代我们的内容,并为每个渲染一个PostComponent.我们的模板应该是这样的(注意.list-component有一个ref,我们稍后会讲)