Ts react hook useInterval to rescript

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))
  })
}
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))
  })
}