I want change use-interval to rescript
This is my code that failed.
let useInterval = (~callback) => {
let savedCallback = ref(callback)
React.useEffect1(() => {
savedCallback.current = callback
None
}, [callback])
React.useEffect0(() => {
let id = Js.Global.setInterval(() => savedCallback.current, 1000)
Some(() => Js.Global.clearInterval(id))
})
}
Lomand
2
let useInterval = (callback, delay) => {
let savedCallback = React.useRef((. ()) => ())
React.useEffect1(() => {
savedCallback.current = callback
None
}, [callback])
React.useEffect1(() => {
let tick = () => {
savedCallback.current(.)
}
let id = Js.Global.setInterval(tick, delay)
Some(() => Js.Global.clearInterval(id))
}, [delay])
}
useInterval((. ()) => {
// code
}, 1000)->ignore
1 Like
I saw React.useRef((. ()) => ())
for the first time.
thank you!
@MiryangJung To use a ref in react, React.useRef
has to be used.
The following code works.
let useInterval = (~callback) => {
let savedCallback = React.useRef(callback)
React.useEffect1(() => {
savedCallback.current = callback
None
}, [callback])
React.useEffect0(() => {
let id = Js.Global.setInterval(() => savedCallback.current, 1000)
Some(() => Js.Global.clearInterval(id))
})
}