taro3.x: 列表下拉更新简单实现
分页参数:
export interface IPage { currentPage: number totalCount: number totalPage: number } export const INIT_PAGE: IPage = { currentPage: 1, totalCount: 0, totalPage: 0 } export const getTotalPage = (limit: number, totalCount: number) => { return Math.ceil(totalCount / limit) }
评论列表tsx:
import React, { useEffect, useState } from 'react'
import { getCurrentInstance } from '@tarojs/taro'
import { View, Image, Text, ScrollView } from '@tarojs/components'
import api from '@services/api'
import app from '@services/request'
import NavBar from '@components/navbar'
import useNavData from '@hooks/useNavData'
import { formatTimestamp } from '@utils/index'
import { IPage, INIT_PAGE, getTotalPage } from '@utils/page'
import './index.scss'
const HouseComment = () => {
const PAGE_LIMIT = 10
const router = getCurrentInstance().router
const houseId = router?.params.id
const houseTitle = router?.params.title
const { contentHeight } = useNavData()
const [showEmpty, setShowEmpty] = useState<boolean>(false)
const [page, setPage] = useState<IPage>(INIT_PAGE)
const [commentList, setCommentList] = useState<any[]>([])
useEffect(() => {
fetchHouseComment()
}, [page.currentPage])
const fetchHouseComment = () => {
app.request({
url: app.areaApiUrl(api.getHouseComment),
data: {
page: page.currentPage,
limit: PAGE_LIMIT,
fang_house_id: houseId,
}
}).then((result: any) => {
setCommentList([...commentList, ...result.data])
setPage({
...page,
totalCount: result.pagination.totalCount,
totalPage: getTotalPage(PAGE_LIMIT, result.pagination.totalCount)
})
})
}
const handleScrollToLower = () => {
if (page.totalPage > page.currentPage) {
setPage({
...page,
currentPage: page.currentPage + 1
})
} else {
setShowEmpty(true)
}
}
return (
<View className="comment">
<NavBar title={`${houseTitle}-全部评论`} back={true}></NavBar>
<View className="comment-header">
<View className="title view-content">全部评论({page.totalCount})</View>
</View>
<View className="comment-content">
<ScrollView
className="comment-list"
scrollY
style={{ height: contentHeight - 80 }}
lowerThreshold={40}
onScrollToLower={handleScrollToLower}
>
{
commentList.map((item: any, index: number) => (
<View key={index} className="comment-item">
<View className="user-photo">
<Image src={item.user.avatar} />
</View>
<View className="context">
<View className="context-name">{item.user.nickname}</View>
<View className="context-content">{item.content}</View>
{
item.image_path &&
<View className="context-image">
<Image src={item.image_path} />
</View>
}
<View className="context-footer">
<View className="date">{formatTimestamp(item.modified, 'yy-MM-dd')}</View>
</View>
</View>
</View>
))
}
{
showEmpty &&
<View className="empty-container">
<Text>没有更多数据了</Text>
</View>
}
</ScrollView>
</View>
<View className="fixed comment-footer">
<View className="footer-btn">我也要点评</View>
</View>
</View>
)
}
export default HouseComment
样式:
.comment { &-header { height: 80px; line-height: 79px; border-bottom: $border; box-sizing: border-box; font-weight: bold; color: $title-color; } &-content { padding-bottom: 80px; .comment-list { .comment-item { display: flex; padding: 30px; border-bottom: $border; .user-photo { width: 90px; height: 90px; border-radius: 50%; overflow: hidden; margin-right: 30px; background-color: $bg-color; Image { width: 100%; height: 100%; } } .context { flex: 1; &-name { font-size: $font-basic; color: $text-color; } &-content { font-size: $font-30; margin: 10px 0; color: $title-color; } &-image { width: 200px; height: 150px; overflow: hidden; background-color: $bg-color; Image { width: 100%; height: 100%; } } &-footer { display: flex; justify-content: space-between; font-size: $font-26; color: $desc-color; margin-top: 10px; } } } } } &-footer { bottom: 0; } }

浙公网安备 33010602011771号