All files / src/utils use-constant.ts

100% Statements 6/6
100% Branches 2/2
100% Functions 1/1
100% Lines 6/6

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 2138x                     38x 4193x   4193x 1954x     4193x    
import { useRef } from "react"
 
type Init<T> = () => T
 
/**
 * Creates a constant value over the lifecycle of a component.
 *
 * Even if `useMemo` is provided an empty array as its final argument, it doesn't offer
 * a guarantee that it won't re-run for performance reasons later on. By using `useConstant`
 * you can ensure that initialisers don't execute twice or more.
 */
export function useConstant<T>(init: Init<T>) {
    const ref = useRef<T | null>(null)
 
    if (ref.current === null) {
        ref.current = init()
    }
 
    return ref.current
}