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, []) }