React hooks 清除定时器并验证效果 目录结构如下 useTime hook Clock.tsx使用useTime hook App.tsx显示Clock组件 总结 参考
目录结构如下
useTime hook
import { useEffect, useState } from "react" ; export function useTime ( ) { const [ time, setTime] = useState < Date> ( ( ) => new Date ( ) ) useEffect ( ( ) => { const id: NodeJS. Timer = setInterval ( ( ) => { setTime ( new Date ( ) ) } , 1000 ) return ( ) => { console . log ( '组件销毁清除定时器' ) ; clearInterval ( id) } } , [ ] ) console . log ( '返回时间' ) return time
}
Clock.tsx使用useTime hook
import React from 'react' ;
import { useTime } from '@/hooks/common' ; function Clock ( ) { const time = useTime ( ) return ( < h1> { time. toLocaleTimeString ( ) } < / h1> ) ;
} export default Clock;
App.tsx显示Clock组件
import React, { useState } from 'react' ;
import Clock from './test/Clock'
import './App.css' ; function App ( ) { const [ show, setShow] = useState < boolean > ( true ) return ( < div className= "App" > < button onClick= { ( ) => setShow ( ! show) } > { show ? '隐藏' : '显示' } < / button> { show && < Clock / > } < / div> ) ;
} export default App;
显示时间(开启定时器)
隐藏时间(清除定时器)
总结
React hook启用定时器后,在组件销毁时清除定时器
参考
我尝试将 state 设置为一个函数,但它却被调用了 Clear a timeout or an interval in React with hooks