我有一个react组件,它映射一个对象数组,然后在屏幕上显示其内容。这非常有效,但是当我检查ul
生命周期方法中的componentDidMount
个子项时,它是一个空数组,但是,一秒后它会包含所有项目。
有没有人知道我怎么能等到一切都被渲染出来?
我已尝试过componentDidUpdate
,但由于有setInterval
方法经常运行,因此这种情况经常发生。
componentDidMount() {
// this is an empty array here
console.log(this.items.children);
setInterval(() => {
this.setState((prevState) => {
return {
left: prevState.left - 1
};
});
}, 20);
}
render() {
let items = this.props.itemss.map(item => {
return (
<Item left={this.state.left} content={item.content} key={item.date} />
);
});
return (
<div>
<ul ref={(el) => { this.items = el; }} >
{ items }
</ul>
</div>
);
}
答案 0 :(得分:-1)
您遇到此问题的原因(除拼写错误外)是因为ref
回调在该组件呈现之后才会将值赋给this.items
。 componentDidMount
在第一次调用render
后调用,而不是在组件卸载并重新安装之前再次调用。
相反,使用在新渲染后调用的componentDidUpdate
,在该方法中检查this.items
是否有值。如果是,则继续,如果没有,只需从函数返回,直到下一个ref
回调成功的渲染。