Delving Developer

useCallback vs useMemo in React

Eddie Cunningham
Eddie Cunningham
2 min readReact.js
Cover Image for useCallback vs useMemo in React

If you've been using React for a while, you probably know about React hooks. Two of the most popular hooks that can improve your application's performance are useCallback and useMemo. These hooks are used to optimize the rendering of functional components by caching or memorizing values.

The Difference Between useCallback and useMemo

The main difference between useCallback and useMemo is what they return. useCallback returns a memoized callback, which means a new reference of the function is returned only if one of its dependencies has changed. useMemo returns a memoized value and accepts a function that's executed to calculate the value.

To understand the difference more clearly, consider the following example:

const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);

In this example, computeExpensiveValue is the function that calculates a complicated value that may take some time to compute, and a and b are the dependencies. When the component is rendered, memoizedValue will be assigned a memoized value that React will cache, and it will be updated only when the dependencies (a and b) change.

On the other hand, with useCallback, you can memoize a function instead of a value. For example:

const memoizedCallback = useCallback(() => {
  console.log(a, b);
}, [a, b]);

In this case, when memoizedCallback is used, the function will always return a reference to the same function unless one of the dependencies has changed.

How to Use useCallback and useMemo

When it comes to using useCallback and useMemo, there are a few things to keep in mind.

Use useCallback when you need to memoize a function, which is often useful when you're passing the function as a prop to a child component. This ensures that the child component receives the same function reference that doesn't cause unnecessary re-renders.

Use useMemo when you need to memoize a value, such as a computed value, an expensive function call, or a complex object. In general, if you have a value that takes some time to compute or is expensive, it's a good candidate for useMemo.

Summary

In summary, useCallback and useMemo are both useful hooks that can help to optimize your React applications. useCallback is used to memoize functions, while useMemo is used to memoize values. Use useCallback when you need to pass a function to a child component, and use useMemo when you need to compute a value that may take some time or is expensive. By using these hooks effectively, you can dramatically improve the performance of your React applications.