#react-native #react-hooks
#react-native #реагирующие перехваты
Вопрос:
Я создаю приложение с использованием React Native и сталкиваюсь с проблемой при создании таймера обратного отсчета.
Мне нужно было использовать setInterval, чтобы реализовать это, но я обнаружил, что setInterval будет действовать не так, как я ожидал.
Итак, я использовал пользовательские перехваты из этого поста, и вот код:
import React, { useState, useEffect, useRef } from 'react';
function useInterval(callback, delay) {
const savedCallback = useRef();
// Remember the latest callback.
useEffect(() => {
savedCallback.current = callback;
}, [callback]);
// Set up the interval.
useEffect(() => {
function tick() {
savedCallback.current();
}
if (delay !== null) {
let id = setInterval(tick, delay);
return () => clearInterval(id);
}
}, [delay]);
}
После этого я создал кнопку для запуска таймера:
const [leftTime, setTime] = useState(300000);
const triggerTimer = () => {
useInterval(() => setTime(leftTime - 1), 1000);
};
return (
<>
<Text>{leftTime}</Text>
<TouchableOpacity onPress={() => triggerTimer()}
<Text>Start Countdown!</Text>
</TouchableOpacity>
</>
);
Однако я получил сообщение об ошибке «Недопустимый вызов перехвата. Перехваты могут вызываться только внутри тела функционального компонента. ‘
Я уже знаю, что перехваты должны вызываться в самом верху функционального компонента, но есть ли какой-либо способ вызвать перехват нажатием кнопки в приложении?
Кроме того, я хочу автоматически остановить таймер и сделать что-то после этого, когда состояние «Оставшееся время» станет равным 0.
Комментарии:
1. что означает перенос второй части? что вы имеете в виду после этого?
2. @elirand5 я написал функцию ‘useInterval’ в виде отдельного файла и импортировал ее в компонент.