首页 > 解决方案 > 如何通过按下 React Native 中的按钮来触发钩子?

问题描述

我正在使用 React Native 制作应用程序,并在制作倒数计时器时遇到问题。

我需要使用 setInterval 来实现这一点,但我发现 setInterval 不会像我预期的那样起作用。

所以我使用了这篇文章中的自定义 Hooks ,代码如下:

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>
  </>
);

但是,我收到一条错误消息,提示“无效的挂钩调用。钩子只能在函数组件的主体内部调用。

我已经知道 Hooks 必须在函数组件的最顶部调用,但是有什么方法可以通过在应用程序中按下按钮来触发钩子?

另外,我想自动停止计时器,然后当状态“leftTime”变为0时做一些事情。

标签: react-nativereact-hooks

解决方案


推荐阅读