summaryrefslogtreecommitdiff
path: root/src/use-interval.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/use-interval.js')
-rw-r--r--src/use-interval.js29
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]
+ )
+}