mock list列表组件 以及弹出框邀请成功记录 antd-List滚动加载

4 篇文章 0 订阅
3 篇文章 0 订阅

List列表在单个页面中分离出组件 mock静态页面

//mock
Mock.mock(/invite\/records/, {
  code: 2000,
  'data|100-300': [{
    'be_invited_user|+1': 1,
    'count':2,
    'phone_num': 18712345678,
    'the_first_login': '2020-02-02 11:52:30'
  }]
})

// 列表中的项目
const InviteRecord = ({ phoneNum, loginData }) => {
  // 单个内容的显示逻辑分离
  const displayPhoneNum = (phoneNum) => {
    const phoneNumStr = String(phoneNum)
    return phoneNumStr.length === 11
      ? `${phoneNumStr.slice(0, 3)}****${phoneNumStr.slice(7)}`
      : ''
  }

  return (
    <div className="invite-record-row">
      <span>{`用户 ${displayPhoneNum(phoneNum)}`}</span>
      <span>{`${loginData} 首次登录`}</span>
    </div>
  )
}

滚动加载list列表

import { useSelector } from 'react-redux';
import React, { useState, useEffect, useRef } from 'react';
import { Modal, Button, List, message } from 'antd';
import request from '@/utils/request'

const [records, setRecords] = useState([]);
 const token = useSelector(state => state.user.token);
/ 获取用于ui渲染的数据
  useEffect(() => {
    const fetchRecords = async () => {
      try {
        setSendSourceCode(true)
        const res = await request.get(`/api/client/user/vip-permission/invite/page-list?page_size=${20}&page=${1}`);
        setRecords(res.results)
       console.log(records)
        setInviteNum(res.count)
        setPageCount(Math.ceil(res.count / 20))
      } catch (error) {
        console.log(error)
      }
    }
    if (token) {
      fetchRecords()
    }
  }, [token])


//滚动加载触底事件调用的方法
  const getPageList = async() => {
    setSendSourceCode(true)
    try {
      const res = await request.get(`/api/client/user/vip-permission/invite/page-list?page_size=${20}&page=${page}`);
      setRecords([...records, ...res.results])
      setPage(page + 1)
    } catch (error) {
      console.log(error)
    }
  }
  // 列表中的项目 滚动加载数据源dataSource
  const InviteRecord = (
    <List
    split={false}
    dataSource={records}
    renderItem={item => (
      <List.Item key={item.be_invited_user}>
        <div className="invite-record-row">
          <span>{`用户 ${item.phone_num}`}</span>
          <span>{`${item.the_first_login} 首次登录`}</span>
        </div>
      </List.Item>
    )}
  >
  </List>
  )

  // 滚动到底部时增加当前页码
  const handleInfiniteOnLoad = () => {
    if (records.length !== 0) {
      if (page > PageCount) {
       return
      } else {
        getPageList();
      }
    } else if (records.length === 0) {
      message.warning('没有更多记录了!', 2)
    }
  }
 <div className="share-list-content">
          <InfiniteScroll
          initialLoad={false}
          isReverse={false}
          pageStart={0}
          dataLength={records.length}
          next={records}
          loadMore={handleInfiniteOnLoad}
          hasMore={sendSourceCode}
          useWindow={false}
          >
          {InviteRecord}
          </InfiniteScroll>
        </div>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ant Design Pro v4 是一个基于 Ant Design 设计语言的企业级中后台前端/设计解决方案,其中包含了一些用于数据模拟的 mock 功能。在 Pro v4 中,mock 数据是通过 umi-request 库来实现的。 要在 Ant Design Pro v4 中使用 mock 功能,你可以按照以下步骤进行操作: 1. 在 `src` 目录下创建一个名为 `mock` 的文件夹。 2. 在 `mock` 文件夹中创建一个名为 `api.ts` 的文件,用于编写接口的 mock 数据。 3. 在 `api.ts` 文件中,你可以使用 umi-request 提供的 `extend` 方法来创建一个请求实例,并通过 `mock` 方法来定义接口的 mock 数据。例如: ```typescript import { extend } from 'umi-request'; const request = extend({ prefix: '/api', timeout: 1000, }); export default { 'GET /api/user': { id: 1, name: 'John Doe', }, 'POST /api/login': (req, res) => { const { username, password } = req.body; if (username === 'admin' && password === '123456') { res.send({ status: 'ok', message: 'Login successful!', }); } else { res.send({ status: 'error', message: 'Invalid username or password!', }); } }, 'PUT /api/user/:id': (req, res) => { const { id } = req.params; const { name } = req.body; res.send({ id, name, }); }, }; ``` 在上面的例子中,我们定义了三个接口的 mock 数据:`GET /api/user`、`POST /api/login` 和 `PUT /api/user/:id`。 4. 在 `src` 目录下的 `models` 文件夹中创建一个名为 `mock.ts` 的文件,并在该文件中导入 `api.ts` 中定义的 mock 数据。例如: ```typescript import api from '@/mock/api'; const enableMock = true; // 是否开启 mock 功能 if (enableMock) { Object.keys(api).forEach((key) => { const [method, path] = key.split(' '); const [mockMethod, mockPath] = method.split('_'); if (mockMethod && mockPath) { umiMocker(mockMethod.toUpperCase(), mockPath, api[key]); } }); } ``` 在上面的例子中,我们通过遍历 `api.ts` 中定义的 mock 数据,并使用 `umiMocker` 方法来注册 mock 接口。 5. 在 `src/app.tsx` 文件中,将 `import './mock';` 添加到文件开头,以确保 mock 数据在应用启动时被加载。例如: ```typescript import './mock'; ``` 完成以上步骤后,当你在开发环境下运行 Ant Design Pro v4 时,接口请求将会被拦截并返回 mock 数据。 请注意,以上只是一个简单的示例,你可以根据自己的需求来编写更复杂的 mock 数据。另外,需要注意的是,在生产环境下是不会启用 mock 功能的,mock 数据只会在开发环境中生效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值