【react】react移动端不规则瀑布流布局上拉加载更多

简介: 【react】react移动端不规则瀑布流布局上拉加载更多

【react】react移动端函数组件瀑布流布局上拉加载更多

使用macy js库和antd-mobile库来实现

1、下载依赖

yarn add macy antd-mobile

npm i macy antd-mobile

2、废话不多说-直接上代码

import React, {useEffect, useState} from "react";
import Macy from 'macy'
import {DotLoading, InfiniteScroll} from "antd-mobile";
import { sleep } from 'antd-mobile/es/utils/sleep'
//后端返回的数据
const dataImages = [
    "https://picsum.photos/640/200/?random",
    "https://picsum.photos/360/640/?random",
    "https://picsum.photos/480/720/?random",
    "https://picsum.photos/480/640/?random",
    "https://picsum.photos/360/?random",
    "https://picsum.photos/360/520/?random",
    "https://picsum.photos/520/360/?random",
    "https://picsum.photos/520/360/?random",
    "https://picsum.photos/520/360/?random",
    "https://picsum.photos/720/640/?random",
]
//后端请求函数返回下一页的数据
let count = 0
export async function mockRequest() {
    if (count >= 5) {
        return []
    }
    await sleep(2000)
    count++
    return dataImages
}
//定义滚动到底部后触发的方法,并根据hasMore来判断要显示的内容
const InfiniteScrollContent = ({ hasMore }) => {
    return (
        <>
            {hasMore ? (
                <>
                    <span>Loading</span>
                    <DotLoading />
                </>
            ) : (
                <span>--- 我是有底线的 ---</span>
            )}
        </>
    )
}
const Index = () => {
    const [data, setData] = useState(dataImages)
    const [hasMore, setHasMore] = useState(true)
    const [masonry, setMasonry] = useState(null);
    //触底后立即触发该方法
    async function loadMore() {
        const append = await mockRequest()
        setData(val => [...val, ...append])
        setHasMore(append.length > 0)
    }
    const getMacy =()=>{
        if (masonry) {
            //当数据更新时,会重新计算并排版
            masonry.reInit()
        } else {
            let masonry = new Macy({
                container: '.macy-container', // 图像列表容器
                trueOrder: false,
                waitForImages: false,
                useOwnImageLoader: false,
                debug: true,
                margin: { x: 10, y: 15 },    // 设计列与列的间距
                columns: 2,    // 设置列数
            })
            setMasonry(masonry)
        }
    }
    //当数据变化则调用getMacy,重新计算
    useEffect(()=>{
        getMacy()
    },[data])
    return (
        <>
            <div className="macy-container 其他的样式名">
                {
                    data && data.map((item,index)=>{
                        return (
                            <img src={item} alt="" className="img_item" key={index}/>
                        )
                    })
                }
            </div>
            <InfiniteScroll loadMore={loadMore} hasMore={hasMore}>
                <InfiniteScrollContent hasMore={hasMore} />
            </InfiniteScroll>
        <>
    );
};
export default Index;

效果演示

image.png

【react】react移动端瀑布流布局效果演示

相关文章
|
6月前
|
前端开发 Android开发 iOS开发
移动端自适应解决方案vw(以react为例)
移动端自适应解决方案vw(以react为例)
141 0
|
12月前
|
前端开发
Layout布局实现一个简单的react管理后台
Layout布局实现一个简单的react管理后台
129 0
|
3月前
|
前端开发
使用 React Router v6 进行布局
【8月更文挑战第27天】
41 1
|
3月前
|
前端开发 JavaScript Shell
react-masonry-css瀑布流的基本使用
react-masonry-css瀑布流的基本使用
169 0
|
6月前
|
前端开发 JavaScript 容器
前端vw自适应解决方案,适用pc端以及移动端,适用webpack以及vite,适用vue以及react
前端vw自适应解决方案,适用pc端以及移动端,适用webpack以及vite,适用vue以及react
394 0
|
6月前
|
移动开发 前端开发 JavaScript
探究移动端混合开发技术:React Native、Weex、Flutter的比较与选择
移动端混合开发技术在移动应用开发领域日益流行,为开发者提供了更高效的跨平台开发方案。本文将比较三种主流混合开发技术:React Native、Weex和Flutter,从性能、生态系统和开发体验等方面进行评估,以帮助开发者在选择适合自己项目的技术时做出明智的决策。
403 2
|
6月前
|
移动开发 前端开发 weex
移动端混合开发技术:React Native、Weex、Flutter 之争
在移动应用开发领域,React Native、Weex 和 Flutter 是备受关注的混合开发技术。本文将对它们进行全面比较与评估,以帮助开发者做出明智的选择。我们将从开发生态、性能、跨平台能力和易用性等方面进行比较,为读者提供全面的参考和指导。
|
6月前
|
移动开发 Dart 前端开发
移动端混合开发技术:React Native、Weex、Flutter的比较与选择
移动应用的开发已经成为现代社会中的重要一环。本文将比较并评估三种主流的移动端混合开发技术:React Native、Weex和Flutter。通过对它们的特点、优势和劣势的分析,帮助开发者在选择适合自己项目的技术方案时做出明智的决策。
|
6月前
|
移动开发 开发框架 前端开发
移动端混合开发技术探析:React Native、Weex、Flutter的比较与选择
随着移动应用开发的高速发展,混合开发技术成为了一种备受关注的选择。本文将对移动端混合开发技术中的React Native、Weex和Flutter进行比较与探讨,分析它们在性能、开发体验、生态系统和跨平台支持等方面的差异,以及如何根据项目需求进行选择。
214 1
|
前端开发
React/Umi中实现移动端滑动图片验证功能
React/Umi中实现移动端滑动图片验证功能
240 0