2017-01-31 2 views
4

Я хотел бы отобразить список элементов, используя virtual-virtualized, однако некоторые элементы могут изменить размер.Как уведомить компонент списка, что один элемент изменил размер?

Я добавил дем, где каждый элемент имеет кнопку, и когда кто-то нажимает на кнопку, то деталь необходимо расширить и нажмите пункты ниже ниже: https://plnkr.co/edit/GG2bSIC5M1Gj7BR1pOii

Прецедент похож на facebook сообщения, когда кто-то замечает, что он расширит сообщение и подтолкнет другие сообщения ниже.

ReactDOM.render(
<List 
className='List' 
autoHeight 
width={300} 
height={400} 
rowCount={list.length} 
rowHeight={30} 
rowRenderer={ 
    ({ index, isScrolling, key, style }) => (
    <div 
     className='Row' 
     key={key} 
     style={style} 
    > 
     {list[index]} 
     <Expander /> /* contains the button, which when click it will expand more text*/ 
    </div> 
) 
} 
/>, 
document.getElementById('example') 

Можно ли достичь этого?

UPDATE

Я понял, что должен быть способ, чтобы заставить List обновить элементы и пересчитывать позиции. Существует пример с InfiniteLoader (react-virtualized example), который использует registerChild в Списке в качестве ссылки. И кажется, что когда InfiniteLoader получает ответ от сервера, он способен форсировать список для повторной рендеринга строк.

Я пробовал другой пример с forceUpdate в списке, однако Список по-прежнему не обновляется.

https://plnkr.co/edit/RftoShEkQW5MR5Rl28Vu

+0

Вам нужно использовать метод List.recomputeRowHeights. https://github.com/bvaughn/react-virtualized/blob/master/docs/List.md#recomputerowheights-index-number –

ответ

2

Попробуйте использовать Коллекцию из срабатывают-виртуализировать вместо списка. Это должно помочь :)

+0

Не могли бы вы добавить пример plunker? (или изменить мой существующий плункер и добавить ссылку). –