It is a lightweight in-memory representation of the actual DOM to track changes in the UI and efficiently update the real DOM when necessary. 
- useState: to add and manage state to functional components
 - useReducer: to add and manage complex state 
 - useEffect: to execute side effects during rendering and hooking into lifecycle hooks 
 - useMemo:  to memoise the output of a function 
 - useCallback: to memoise a function declaration when a function is passed to children components that are memoised.
 - useContext: to access context object
 - useLayoutEffect: synchronously useEffect
 - useRef: to access and manipulate DOM and store values that do not cause rerender on updates.
 - use
 - useDebugValue
 - useId
 - useDeferredValue
 - useTransition
 - useSyncExternalStore
 - useInsertionEffect
 - useImperativeHandle