添加新项目后反应本机Flatlist scrollToEnd

时间:2019-01-03 12:28:34

标签: react-native react-native-flatlist

添加新的列表项(例如聊天)后,我需要滚动到FlatList的末尾。 所以我用新消息更改状态,然后使用:

this.setState({messages});
this.messagesList.scrollToEnd({animated: true});

仅当我添加一些“魔术” setTimeout(200毫秒)时,它才会起作用。 有什么方法可以检测到是否添加了新消息,我可以调用scrollToEnd吗?

1 个答案:

答案 0 :(得分:0)

setState是异步的,因此执行类似的操作将不起作用。

设置状态后要执行某些操作-将回调作为第二个参数传递给setState

this.setState(
    {messages}, 
    () => this.messagesList.scrollToEnd({animated: true})
);

但是根据我的经验,您仍然需要简短的setTimeout。设置状态后,渲染可能会产生一些滞后,并且滚动会过早触发。