refs instead of {data-item=}

master v1.0.8
Vitaliy Filippov 2019-06-16 12:38:44 +03:00
parent f0e25628ae
commit 7520acd02d
2 changed files with 22 additions and 9 deletions

View File

@ -5,6 +5,7 @@
*/
import React from 'react';
import ReactDOM from 'react-dom';
import PropTypes from 'prop-types';
import { virtualScrollDriver } from 'dynamic-virtual-scroll';
@ -33,16 +34,28 @@ export class VirtualScrollList extends React.Component
scrollTimes: 0,
}
setItemRef = []
itemRefs = []
makeRef(i)
{
this.setItemRef[i] = (e) => this.itemRefs[i] = e;
}
renderItems(start, count, is_end)
{
let r = [];
for (let i = 0; i < count; i++)
{
r.push(
<div data-item={i+start} key={i+start}>
{this.props.renderItem(i+start)}
</div>
);
let item = this.props.renderItem(i+start);
if (item)
{
if (!this.setItemRef[i+start])
{
this.makeRef(i+start);
}
r.push(<item.type {...item.props} key={i+start} ref={this.setItemRef[i+start]} />);
}
}
return r;
}
@ -93,9 +106,9 @@ export class VirtualScrollList extends React.Component
getRenderedItemHeight = (index) =>
{
if (this.viewport)
if (this.itemRefs[index])
{
const e = this.viewport.querySelector('div[data-item="'+index+'"]');
const e = ReactDOM.findDOMNode(this.itemRefs[index]);
if (e)
{
return e.getBoundingClientRect().height;
@ -127,7 +140,7 @@ export class VirtualScrollList extends React.Component
}
else
{
const el = this.viewport.querySelector('div[data-item="'+Math.floor(pos)+'"]');
const el = ReactDOM.findDOMNode(this.itemRefs[Math.floor(pos)]);
if (el)
{
this.viewport.scrollTop = el.offsetTop - (this.props.headerHeight||0) + el.offsetHeight*(pos-Math.floor(pos));

View File

@ -1,6 +1,6 @@
{
"name": "dynamic-virtual-scroll",
"version": "1.0.7",
"version": "1.0.8",
"author": {
"name": "Vitaliy Filippov",
"email": "vitalif@yourcmc.ru",