diff options
Diffstat (limited to 'src/use-interval.js')
-rw-r--r-- | src/use-interval.js | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/use-interval.js b/src/use-interval.js new file mode 100644 index 0000000..5ca3305 --- /dev/null +++ b/src/use-interval.js @@ -0,0 +1,29 @@ +// lifted from here: +// https://overreacted.io/making-setinterval-declarative-with-react-hooks/ +import React, { useState, useEffect, useRef } from 'react' + +export const 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] + ) +} |