Реагировать на собственный плоский список scrollToEnd после добавления нового элемента

Мне нужно прокрутить до конца FlatList после добавления нового элемента списка (например, чата). Поэтому я меняю состояние новым сообщением и затем использую:

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

Это работает только в том случае, если я добавлю "волшебный" setTimeout (200 мс). Есть ли способ обнаружить, что добавлено новое сообщение, и я могу вызвать scrollToEnd?

1 ответ

setState является асинхронным, поэтому выполнение чего-либо после этого не будет работать.

Чтобы сделать что-то после установленного состояния - передайте обратный вызов setState в качестве второго аргумента.

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

Но из моего опыта тебе понадобится еще короткая setTimeout, Поскольку после установки состояния может возникнуть некоторая задержка при рендеринге, и прокрутка будет запущена слишком рано.

Другие вопросы по тегам