diff --git a/VirtualScrollList.js b/VirtualScrollList.js index 15be53d..42714e7 100644 --- a/VirtualScrollList.js +++ b/VirtualScrollList.js @@ -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( -
- {this.props.renderItem(i+start)} -
- ); + let item = this.props.renderItem(i+start); + if (item) + { + if (!this.setItemRef[i+start]) + { + this.makeRef(i+start); + } + r.push(); + } } 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)); diff --git a/package.json b/package.json index 6db0ec4..c3a4ee1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dynamic-virtual-scroll", - "version": "1.0.7", + "version": "1.0.8", "author": { "name": "Vitaliy Filippov", "email": "vitalif@yourcmc.ru",