summaryrefslogtreecommitdiff
path: root/src/use-interval.js
diff options
context:
space:
mode:
authorNick Van Doorn <vandoorn.nick@gmail.com>2019-03-29 00:35:56 -0700
committerNick Van Doorn <vandoorn.nick@gmail.com>2019-03-29 00:35:56 -0700
commit65220cc8db0d7c63f49627526466d54969958fe1 (patch)
treee2989cb16576f177e60f75f9a733487adfd868f5 /src/use-interval.js
parent51687fe7a2de2d4ed2800af46f9b6a9ac6c929ee (diff)
Init commit
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]
+ )
+}