所以我有一个<ul>
列表,其中包含要在我的React应用程序中砌筑的<li>
个项目,以后这些项目将被来回过滤。
当组件重新渲染时会出现问题。我想使用列表中新添加/删除的项目进行平滑更新。
到目前为止,这是有问题的代码:(不是所有内容,只有重要的内容)
import Masonry from 'masonry-layout'
componentDidMount: function() {
this.masonry = new Masonry( this.list, {
itemSelector: '.card',
gutter: 10,
percentPosition: true
})
},
componentDidUpdate: function() {
this.masonry.reloadItems()
},
render: function() {
return (
<div>
<h3>{this.props.name}</h3>
<ul className="card-list" ref={(ul) => { this.list = ul }}>
{this._renderCards()}
</ul>
</div>
)
},
_renderCards: function() {
return this.state.cards.map(card => (
<Card key={card.name} {...card} />
))
},
似乎发生的情况是,每次更新组件
<ul>
时,都会重新渲染该并失去与砌体的绑定,这使我无法对其进行任何进一步的操作,这我真的不明白为什么这样做,因为只有列表实际上已更新。任何帮助深表感谢!
编辑:这是关于石工的reloadItems()http://masonry.desandro.com/methods.html#reloaditems的文档
最佳答案
经过大量搜索和挖掘之后,似乎像我想的那样工作,我唯一缺少的是reloadItems()不会触发Masonry进行的任何布局,因此在我重新加载已解决的项目后调用它这样的问题:
componentDidUpdate: function() {
this.masonry.reloadItems()
this.masonry.layout()
},