前端性能优化(三)react 固定及非固定高度虚拟滚动

固定高度虚拟列表

import {FixedSizeList} from 'react-window'
// import FixedSizeList from './FixedSizeList'
import './Fixed.css'

// 渲染的每一行的 item 项
function Row({index, style}) {
  return <div className={index % 2 ? 'odd': 'even'} style={style}>
    Row {index}
  </div>
}

function App() {
  // 可视区的宽高 200,每一项高度 50,列表总数 1000
  
  return <FixedSizeList className='list' height={200} width={200} itemSize={50} itemCount={1000}>
    {Row}
  </FixedSizeList>
}
export default App

不定高度虚拟列表


import { VariableSizeList } from "react-window";
// import  VariableSizeList  from "./VariableSizeList.js";
import "./Fixed.css";

// 这里给出每个元素的高度计算方式,可以根据自己的业务需求按条件计算,这里简单给出随机获取
const rowSizes = new Array(1000).fill(true).map(() => 25 + Math.round(Math.random() * 55))
const getItemSize = index => rowSizes[index]

function Row({ index, style }) {
  return (
    <div className={index % 2 ? "odd" : "even"} style={style}>
      Row {index}
    </div>
  );
}

function App() {
  return (
    <VariableSizeList
      className="list"
      height={200}
      width={200}
      itemSize={getItemSize}
      itemCount={1000}
    >
      {Row}
    </VariableSizeList>
  );
}
export default App;

css样式

.list {
    border: 1px solid gray;
  }
  .odd, .even {
    display: flex;
    align-items: center;
    justify-content: center;
  }
  
  .odd {
    background-color: pink;
  }
  
  .even {
    background-color: antiquewhite;
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值