Why Hooks?
Hooks solve several problems:- Reusable stateful logic: Share logic between components without wrapper hell
- Simpler components: No need for class components and
thiskeyword - Better code organization: Group related logic together instead of splitting it across lifecycle methods
- Smaller bundle sizes: Function components are smaller than classes
Rules of Hooks
Built-in Hooks
React provides several built-in Hooks. Below is a comprehensive overview based on React’s source code.State Hooks
useState
Adds state to function components:useReducer
An alternative touseState for complex state logic:
Effect Hooks
useEffect
Performs side effects in function components:useLayoutEffect
LikeuseEffect, but fires synchronously after DOM mutations:
useInsertionEffect
Fires before all DOM mutations, primarily for CSS-in-JS libraries:Context Hook
useContext
Reads the current value from a context:According to React’s source code, calling
useContext(Context.Consumer) is not supported and will cause bugs. Always call useContext(Context) instead.Ref Hook
useRef
Creates a mutable ref object that persists across renders:Performance Hooks
useMemo
Memoizes a computed value:useCallback
Memoizes a function:Transition Hooks
useTransition
Marks state updates as non-urgent (transitions):useDeferredValue
Defers updating a value:Other Hooks
useId
Generates unique IDs for accessibility attributes:useSyncExternalStore
Subscribes to an external store:useImperativeHandle
Customizes the ref value exposed to parent components:useDebugValue
Displays a label in React DevTools:Experimental Hooks
These are available in React but may change:useOptimistic
Shows optimistic state during async operations:useActionState
Manages state for form actions:use
Reads the value of a Promise or Context:Complete Hook List from React Source
Based onReactHooks.js, here are all available hooks:
useState- State managementuseReducer- Complex state managementuseRef- Mutable refsuseEffect- Side effectsuseLayoutEffect- Synchronous side effectsuseInsertionEffect- CSS injectionuseContext- Read contextuseCallback- Memoize functionsuseMemo- Memoize valuesuseImperativeHandle- Customize refuseDebugValue- DevTools labeluseTransition- Non-urgent updatesuseDeferredValue- Defer value updatesuseId- Unique IDsuseSyncExternalStore- External store subscriptionuseOptimistic- Optimistic UIuseActionState- Form actionsuse- Read promises/context
Custom Hooks
You can create your own Hooks to reuse stateful logic:Custom Hooks must start with “use” (like
useWindowSize, useFetch, etc). This convention is important because it lets React check for Hook rule violations.Common Patterns
Fetching Data
Form Handling
Next Steps
Rendering
Learn how React renders and updates the DOM
Lifecycle
Understand component lifecycle in depth