添加新的列表项(例如聊天)后,我需要滚动到FlatList的末尾。 所以我用新消息更改状态,然后使用:
this.setState({messages});
this.messagesList.scrollToEnd({animated: true});
仅当我添加一些“魔术” setTimeout(200毫秒)时,它才会起作用。 有什么方法可以检测到是否添加了新消息,我可以调用scrollToEnd吗?
答案 0 :(得分:0)
setState
是异步的,因此执行类似的操作将不起作用。
设置状态后要执行某些操作-将回调作为第二个参数传递给setState
。
this.setState(
{messages},
() => this.messagesList.scrollToEnd({animated: true})
);
但是根据我的经验,您仍然需要简短的setTimeout
。设置状态后,渲染可能会产生一些滞后,并且滚动会过早触发。