Как вызвать перехват нажатием кнопки в React Native?

#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’ в виде отдельного файла и импортировал ее в компонент.