29 lines
		
	
	
	
		
			816 B
			
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			29 lines
		
	
	
	
		
			816 B
			
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								// Copyright 2023 Signal Messenger, LLC
							 | 
						||
| 
								 | 
							
								// SPDX-License-Identifier: AGPL-3.0-only
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import { useCallback, useEffect, useRef } from 'react';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * If you get a warning like:
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Warning: Can't perform a React state update on an unmounted component.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * your component is probably trying to set state after it has unmounted, e.g. after a
							 | 
						||
| 
								 | 
							
								 * timeout or async call. If you can, clear the timeout when the component unmounts (e.g.
							 | 
						||
| 
								 | 
							
								 * on useEffect cleanup). Otherwise, use this hook to check if the component is mounted
							 | 
						||
| 
								 | 
							
								 * before updating state.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function useIsMounted(): () => boolean {
							 | 
						||
| 
								 | 
							
								  const isMounted = useRef(false);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  useEffect(() => {
							 | 
						||
| 
								 | 
							
								    isMounted.current = true;
							 | 
						||
| 
								 | 
							
								    return () => {
							 | 
						||
| 
								 | 
							
								      isMounted.current = false;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								  }, []);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return useCallback(() => isMounted.current === true, []);
							 | 
						||
| 
								 | 
							
								}
							 |