reactjs - 与 setInterval/clearInterval [react-typescript] 一起使用时的 useRef 类型
问题描述
我正在设置一个 useRef 对象来保存一个 NodeJS.Timeout 组件,即 setInterval() 的返回类型。当我稍后在 clearInterval 中使用它时,代码中的两个 intervalRef.current 实例都会出现错误(如下所示)。
设置它的正确方法是什么,以便我可以在按钮 onClick 事件中调用 clearInterval?
function HookTimer(): ReactElement {
const [timer, setTimer] = useState(0)
let intervalRef = useRef<NodeJS.Timeout>()
useEffect(() => {
intervalRef.current = setInterval(() => {
setTimer(prevTimer => prevTimer + 1)
}, 1000)
return () => {
clearInterval(intervalRef.current)
}
}, [])
return (
<div>
Hook Timer - {timer}
<div>
<button onClick={() => clearInterval(intervalRef.current)}>Clear Hook Timer</button>
</div>
</div>
)
没有重载匹配此调用。重载 1 of 2,'(intervalId: Timeout): void',给出了以下错误。'Timeout | 类型的参数 undefined' 不可分配给“超时”类型的参数。类型“未定义”不可分配给类型“超时”。Overload 2 of 2, '(handle?: number | undefined): void',给出了以下错误。'Timeout | 类型的参数 undefined' 不能分配给“number |”类型的参数 不明确的'。类型“超时”不可分配给类型“数字”.ts(2769)
解决方案
推荐阅读
- pdf - 使用 Kable 时,Knit to pdf 不起作用
- spring - 是否应该使用 someRestController 来接收 i18n 的 lang 参数以及 LocaleResolver?
- reactjs - Redux 状态的嵌套对象在组件内可用但不可访问
- google-apps-script - 如何在不复制其余事件的情况下更新单个事件
- python - 如何在文件中使用正则表达式查找搜索字符串的坐标?
- c# - Power BI C# API:如何更新数据集的 refreshSchedule?
- logging - 如何在应用程序脚本中指定日志记录级别?
- ruby-on-rails - Heroku CI - VCR - Rspec - 未用于我的 Rspec 测试的夹具
- sql - Postgres 获取所有用户定义的触发函数的列表
- javascript - 对象数组上的 Setstate 使映射崩溃