when you want to use <StrictMode>
but do not want your useEffect
s to be repeated
import React, { useEffect, useRef } from 'react'
const useUnstrictEffect = function (og_func, deps) {
const ref_obj = {}
const ref_teardown = useRef()
useEffect(() => {
const id_timeout = setTimeout(() => {
// do the original thing //
const func_teardown = og_func()
ref_teardown.current = () => {
func_teardown()
return
}
return
}, 1)
return () => {
if (ref_teardown.current) {
ref_teardown.current()
ref_teardown.current = undefined
}
else {
// immediate Unmount = STOP og_func from ever running
clearTimeout(id_timeout)
}
return
}
}, (deps === undefined ? [] : deps))
return ref_obj
}