【发布时间】:2017-06-17 03:08:40
【问题描述】:
我想使用 react-virtualized 渲染一个项目列表,但是有些项目可能会改变大小。
我添加了一个演示,其中每个项目都有一个按钮,当有人单击该按钮时,该项目需要展开并将以下项目推低: https://plnkr.co/edit/GG2bSIC5M1Gj7BR1pOii
用例类似于facebook帖子,当有人cets时,它将扩大帖子并将其他帖子推低。
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')
有什么方法可以实现吗?
更新
我意识到必须有一种方法可以强制List 更新项目并重新计算位置。有一个InfiniteLoader (react-virtualized example) 的示例,它在列表中使用registerChild 作为参考。而且似乎当 InfiniteLoader 从服务器接收到答案时,它能够强制列表重新渲染行。
我在列表中尝试了另一个带有forceUpdate 的示例,但是列表仍然没有更新。
【问题讨论】:
-
您需要使用
List.recomputeRowHeights方法。 github.com/bvaughn/react-virtualized/blob/master/docs/…