useIsMounted
Custom hook that determines if the component is currently mounted.
Usage
import { useEffect, useState } from 'react'
import { useIsMounted } from 'usehooks-ts'
const delay = (ms: number) => new Promise(resolve => setTimeout(resolve, ms))
function Child() {
const [data, setData] = useState('loading')
const isMounted = useIsMounted()
// simulate an api call and update state
useEffect(() => {
void delay(3000).then(() => {
if (isMounted()) setData('OK')
})
}, [isMounted])
return <p>{data}</p>
}
export default function Component() {
const [isVisible, setVisible] = useState<boolean>(false)
const toggleVisibility = () => {
setVisible(state => !state)
}
return (
<>
<button onClick={toggleVisibility}>{isVisible ? 'Hide' : 'Show'}</button>
{isVisible && <Child />}
</>
)
}
API
▸ useIsMounted(): () => boolean
Custom hook that determines if the component is currently mounted.
Returns
fn
A function that returns a boolean value indicating whether the component is mounted.
▸ (): boolean
Returns
boolean
Hook
import { useCallback, useEffect, useRef } from 'react'
export function useIsMounted(): () => boolean {
const isMounted = useRef(false)
useEffect(() => {
isMounted.current = true
return () => {
isMounted.current = false
}
}, [])
return useCallback(() => isMounted.current, [])
}