很多时候我们在做移动端时实现上拉刷新,下拉加载的时候用到一些逻辑处理,
我总结了一下使用vant实现的上拉刷新,下拉加载的功能,拿来就用,省时省力
<template>
<div class="home-container">
<van-nav-bar title="测试代码" fixed/>
<van-pull-refresh v-model="refreshing" @refresh="onRefresh" :disabled="finished">
<van-list
v-model="loading"
:finished="finished"
finished-text="没有更多了"
@load="onLoad"
>
<ArticleInfo
v-for="item in artList"
:key="item.art_id"
:title="item.title"
:author="item.aut_name"
:comm_count="item.comm_count"
:pubdate="item.pubdate"
:cover="item.cover"
></ArticleInfo>
</van-list>
</van-pull-refresh>
</div>
</template>
<script>
import { getArticleListAPI } from '@/api/articleAPI.js'
import ArticleInfo from '@/components/Article/ArticleInfo.vue'
export default {
name: 'Home',
components: {
ArticleInfo
},
data() {
return {
page: 1,
limit: 10,
artList: [],
loading: true,
finished: false,
refreshing: false
}
},
created() {
this.initArticleList()
},
methods: {
async initArticleList(isRefresh) {
const { data: res } = await getArticleListAPI(this.page, this.limit)
if (isRefresh) {
this.artList = [...res, ...this.artList]
this.refreshing = false
} else {
// console.log(res)
// this.artList = res
this.artList = [...this.artList, ...res]
this.loading = false
}
if (res.length === 0) {
this.finished = true
}
},
// 上拉加载处理函数
onLoad() {
this.page++
// this.loading = true
this.initArticleList()
},
// 下拉刷新处理函数
onRefresh() {
this.page++
// this.refreshing = true
this.initArticleList(true)
}
}
}
</script>
<style lang="less" scoped>
.home-container {
padding: 46px 0 50px;
.van-nav-bar {
background: #007bff;
}
/deep/ .van-nav-bar__title {
color: #fff;
}
}
</style>
可以参考一下这个逻辑,vue3,react都是通的,自行觅食