Спасибо всем за ваши ответы и отзывы. Я пытался реализовать то, что все рекомендовали, но безрезультатно. К счастью, они отправили меня на правильный путь, и, насколько я знаю, возможно, в моем компоненте было что-то еще, что я не упомянул в своем вопросе, что делало вещи более сложными.
Все то же самое, после того, как несколько дней ударился головой о стену, я смог решить эту проблему следующим образом:
let timeoutId;
const Carousel = () => {
const startCarouselCycle = () => {
timeoutId = setTimeout(() => {
// Code here that calls scrollToIndex for the FlatList.
}, 5000);
};
const startNextCarouselCycle = () => {
// Other code here.
startCarouselCycle();
};
useEffect(() => {
startCarouselCycle();
return () => {
if (timeoutId) {
clearTimeout(timeoutId);
}
};
}, []);
return (
<FlatList
// Non-essential code removed.
horizontal={true}
scrollEnabled={false}
onMomentumScrollEnd={startNextCarouselCycle}
/>
);
};
export default Carousel;
Главное, что я изменил, - это перемещение переменной timeoutId
в снаружи. функция рендеринга компонента. Функция рендеринга непрерывно вызывается, из-за чего timeoutId
не обновлялся должным образом (понятия не имею, почему возникает проблема с закрытием?!).
Все равно перемещение переменной за пределы функции Carousel
сделал трюк.