手写瀑布流—67渲染

1.动态渲染图片

另外讲一个react hooks和mocks的结合使用实现分页功能

首先安装axios, mockjs

然后新建一个文件写入以下代码即可

// // mock.js
// // 使用 Mock
// var Mock = require('mockjs')
// var data = Mock.mock("/mock",{  
//   //"/mock"是通过ajax获取数据时填写的地址,可以随意写。但要和ajax请求时填写的地址一致。
// 	"userinfo|20":[{   			//生成四个如下格式的数据
// 		"id|+1":1, 						//数字从1开始,后续依次加1
// 		"name":"@cname",			//名字为随机中文名
// 		"age|18-28":25, 			//年龄是18-28之间的随机数
// 		"sex|1":["男","女"],	 //性别是数组里的随机一项
//         "job|1":["web","teacher","python","php"],   //job是数组里的随机一项
//         "image": "@image('','','','','')",
// 	}]
// })
// // 输出结果
// export default data

//mock.js 文件

import Mock from 'mockjs' // 引入mockjs

const Random = Mock.Random // Mock.Random 是一个工具类,用于生成各种随机数据

const dataList = [] // 用于接受生成数据的数组

for (let i = 0; i < 26; i++) { // 可自定义生成的个数

  const template = {

    'Boolean': Random.boolean, // 可以生成基本数据类型

    'Natural': Random.natural(1, 10), // 生成1到100之间自然数

    'Integer': Random.integer(1, 100), // 生成1到100之间的整数

    'Float': Random.float(0, 100, 0, 5), // 生成0到100之间的浮点数,小数点后尾数为0到5位

    'Character': Random.character(), // 生成随机字符串,可加参数定义规则

    'String': Random.string(2, 10), // 生成2到10个字符之间的字符串

    'Range': Random.range(0, 10, 2), // 生成一个随机数组

    'Date': Random.date(), // 生成一个随机日期,可加参数定义日期格式

    'Image': Random.image(Random.size, '#02adea', 'Hello'), // Random.size表示将从size数据中任选一个数据

    'Color': Random.color(), // 生成一个颜色随机值

    'Paragraph': Random.paragraph(2, 5), // 生成2至5个句子的文本

    'Name': Random.name(), // 生成姓名

    'Url': Random.url(), // 生成web地址

    'Address': Random.province() // 生成地址

  }

  dataList.push(template)

}

// list 分页接口()

Mock.mock('/mock', 'post', (params) => {
  var info = JSON.parse(params.body)
  info = JSON.parse(info.data);
  var [index, size, total] = [info.pageIndex, info.pageSize, dataList.length]

  var len = total / size

  var totalPages = len - parseInt(len) > 0 ? parseInt(len) + 1 : len

  var newDataList = dataList.slice(index * size, (index + 1) * size)

  return {

    'code': '0',

    'message': 'success',

    'data': {

      'pageIndex': index,

      'pageSize': size,

      'rows': newDataList,

      'total': total,

      'totalPages': totalPages

    }

  }

})

在代码中引入

  const initListPage = {
    pageIndex: 0,
    pageSize: 10
  };
  const [listPage, setListPage] = useState(initListPage);
  const [data, setData] = useState([]);

  const initData = () => {
    axios
      .post("/mock", { 
        dataType: "json",
        data: JSON.stringify(listPage)
       }) //这列的'/mock'与mock.js文件里的地址一致
      .then((res) => {
        const dataTmp = res.data.data.rows;
        setData(dataTmp);
      });
  };

教程中是这样写的

我使用的是react,直接render

我也用操作节点的方式做一下

  const render = (args) => {
    const oParentNode = document.getElementsByClassName("container")[0];
    args.forEach((item) => {
      const itemNode = document.createElement('div');
      itemNode.className = "image-item";
      const imgNode = document.createElement('img');
      imgNode.src = item.Image;
      imgNode.alt = '';
      itemNode.appendChild(imgNode);
      oParentNode.appendChild(itemNode);
    });
  };

2.滑动触底加载更多

看上面的图理解一下

A a 的距离是一样的,B b的距离也是一样的

 

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值