react-native - 如何通过按下 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时做一些事情。
解决方案
推荐阅读
- r - 如何从R中的列表中删除函数?
- c# - 处理 wpf ComboBox ItemsSource 在选择时更改
- git - 使用“我们的”策略解决的还原合并提交
- google-cloud-dataflow - 使用 gcloud cli 执行 Dataflow 作业时出现“无法识别的参数”错误
- scala - Spark 高效地从关系数据库中提取大型查询结果
- spring - 在 @SpringBootTest 中运行自定义 ApplicationContextInitializer
- pytorch - 在演示中复制语义分析模型
- c# - 如何使用 mysql db、C# 中的存储过程创建 rdlc 报告
- r - 如何使用 get_contrast 获得边际手段
- python - 在循环内连接数据框