Skip to Content
👆 We offer 1-on-1 classes as well check now
React.jsCore HooksuseMemo and useCallback Hooks

useMemo and useCallback Hooks

The useMemo and useCallback hooks in React 19 are essential for optimizing performance by memoizing values and functions. Memoization is a technique used to speed up applications by caching the results of expensive function calls and reusing them when the same inputs occur again. This helps prevent unnecessary computations and improves the overall user experience.

Basic Example

To understand the basics of useMemo and useCallback, let’s start with a simple example. Consider a scenario where you have a component that calculates the total cost of items in a cart. You can use useMemo to memoize the calculation to prevent it from running on every render.

import { useState, useMemo } from 'react'; function Cart() { const [items, setItems] = useState([ { id: 1, price: 10.99 }, { id: 2, price: 5.99 }, ]); const totalCost = useMemo(() => { return items.reduce((acc, item) => acc + item.price, 0); }, [items]); return ( <div> <h2>Cart</h2> <ul> {items.map((item) => ( <li key={item.id}>{item.price}</li> ))} </ul> <p>Total Cost: {totalCost}</p> </div> ); }

In this example, useMemo is used to calculate the totalCost only when the items array changes, preventing unnecessary computations.

Advanced Usage

For a more complex scenario, let’s consider using useCallback to memoize a function. Suppose you have a search input that triggers a search function on every keystroke. You can use useCallback to memoize the search function and prevent it from being recreated on every render.

import { useState, useCallback } from 'react'; function SearchBar() { const [searchTerm, setSearchTerm] = useState(''); const search = useCallback((term) => { // Simulate a search operation console.log(`Searching for ${term}...`); }, []); const handleSearch = () => { search(searchTerm); }; return ( <div> <input type="search" value={searchTerm} onChange={(e) => setSearchTerm(e.target.value)} /> <button onClick={handleSearch}>Search</button> </div> ); }

In this example, useCallback is used to memoize the search function, which is then used as a dependency for the handleSearch function.

Best Practices

When using useMemo and useCallback, keep the following best practices in mind:

  • Always provide a dependency array to prevent unnecessary computations.
  • Use useMemo for memoizing values and useCallback for memoizing functions.
  • Avoid using useMemo or useCallback for large objects or complex computations.
  • Use the useRef hook for storing large objects or complex computations.

Key Takeaways

  • Use useMemo to memoize values and prevent unnecessary computations.
  • Use useCallback to memoize functions and prevent them from being recreated on every render.
  • Always provide a dependency array to useMemo and useCallback to ensure correct behavior.
  • Follow best practices to avoid common pitfalls and optimize performance in your React applications.
Last updated on