react+ant-mobile上拉加载效果

react H5 上拉加载更多

组件库:ant-mobile
组件:无限滚动组件+空状态
效果图就和官方的效果一样
空状态效果图

代码如下,把滚动和空状态封装到了一起,下次要用可以直接调用
封装

import React, { memo } from "react";
import { InfiniteScroll, Empty } from "antd-mobile";
export default memo(({ loadMore, hasMore, List, renderItem }) => {//父传子
  return (
    <>
      {(List || []).map((item, index) => {
       {/**renderItem就是要渲染的内容,可以写成任何需要的样式*/}
        return renderItem ? renderItem(item, index) : "";
      })}
      {/**无限滚动 */}
      <InfiniteScroll loadMore={loadMore} hasMore={hasMore} />
      {/**空状态 */}
      {List.length <= 0 && (
        <Empty
          style={{ padding: "90% 0" }}
          imageStyle={{ width: 128 }}
          description="暂无数据"
        />
      )}
    </>
  );
});

调用

import ScrollList from "../components/scrollList";//引入匿名暴露的组件,名字可以随便取
import { sleep } from "antd-mobile/es/utils/sleep";//这个应该是加载时间
export default memo(() => {
  const [List, setList] = useState([]);//列表数据源
  const [currentPage, setcurrentPage] = useState(1);//当前页
  const [pageSize, setPageSize] = useState(10);//每页条数
  const [hasMore, setHasMore] = useState(true);//初始状态为true,用户滚动到底部时会自动调用loadMore函数,相当于滚动一次,请求一次数据,控制loadMore是否调用的标识
  
  const loadMore = async () => {
    const {state,list, pagination} = await ListGet({currentPage,pageSize})//在loadMore中请求数据
    if (state === 200) {
      const append = list ?? [];
      setDataList((val) => [...val, ...append]);//因为是上拉加载,所以需要在前一次的列表上合并下一次请求到的列表
      setCurrent((currentPage) => currentPage+ 1);//下次请求时页数+1
      if (currentPage=== pagination.totalPage) {
        setHasMore(false);//当前页数和返回数据的总页数相同是,不在有更多内容,不在继续调用loadMore函数
      }
      await sleep(2000);
    }
  };
  const renderItem = (item, index) => {//渲染的内容
    return (
      <div  key={index}>
        <div>
          <div>{item.xxx}</div>
          <div>{item.xxx}</div>
        </div>
      </div>
    );
  }; 
  return (
    <>
      <div className={styles.listWrap}>
        <ScrollList
          loadMore={loadMore}//加载更多回调函数
          hasMore={hasMore}//是否还有更多内容
          List={List}//列表数据源
          renderItem={renderItem}//要渲染的内容,就是list经过map后的item
        />
      </div>
    </>
  );
});


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用ReactAnt Design来实现一个用户管理功能非常简单。首先,我们需要创建一个React应用程序。可以使用脚手架工具(如Create React App)来快速搭建起一个React应用的基本结构。 1. 创建React应用程序 使用以下命令来创建一个新的React应用程序: ``` npx create-react-app user-management cd user-management ``` 2. 安装Ant Design 在项目根目录下运行以下命令来安装Ant Design依赖项: ``` npm install antd ``` 3. 集成Ant Design组件 编辑src/App.js文件,导入所需的Ant Design组件并编写用户管理功能的代码。以下是一个简单的示例: ```jsx import React, { useState } from 'react'; import { Table, Button, Modal, Form, Input } from 'antd'; const App = () => { const [users, setUsers] = useState([]); const [isModalVisible, setIsModalVisible] = useState(false); const columns = [ { title: '姓名', dataIndex: 'name', key: 'name' }, { title: '年龄', dataIndex: 'age', key: 'age' }, { title: '操作', key: 'action', render: (text, record) => <Button onClick={() => deleteUser(record.key)}>删除</Button> } ]; const [form] = Form.useForm(); const addUser = () => { form.validateFields().then(values => { const user = { name: values.name, age: values.age, key: users.length + 1 }; setUsers([...users, user]); form.resetFields(); setIsModalVisible(false); }); }; const deleteUser = (key) => { setUsers(users.filter(user => user.key !== key)); }; return ( <div> <Button onClick={() => setIsModalVisible(true)}>添加用户</Button> <Table dataSource={users} columns={columns} /> <Modal title="添加用户" visible={isModalVisible} onCancel={() => setIsModalVisible(false)} onOk={addUser}> <Form form={form}> <Form.Item name="name" label="姓名" rules={[{ required: true }]}> <Input /> </Form.Item> <Form.Item name="age" label="年龄" rules={[{ required: true }]}> <Input /> </Form.Item> </Form> </Modal> </div> ); }; export default App; ``` 4. 运行应用 使用以下命令来运行应用程序: ``` npm start ``` 应用程序将在浏览器中自动打开。您现在就可以通过点击“添加用户”按钮来添加用户,点击“删除”按钮来删除用户,并且可以通过Ant Design的Table组件来显示用户列表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值