Hooks are a relatively new feature of React that were introduced in React version 16.8 and enable us to use state and react features from a function-based component, which include:
useState
useEffect
useHistory
Hooks help us avoid the complexities of classes and make our code simpler to read and understand.
useMemo
hook in ReactIn this shot, we will go over the useMemo
hook in React.
In addition to understanding the functionality of this hook, it is also important to note that this hook is important from a React interview perspective.
Many interviewers like to ask questions related to the
useMemo
hook.
useMemo
is a hook that is used in the functional component of React that returns a memoized value.
useMemo
?The basic purpose of the useMemo
hook is related to the fact that we try to avoid the unnecessary re-rendering of components and props in our program.
We want to make sure that only the components that witness a change in their values are re-rendered; otherwise, there’s no need to re-render the component and slow down the performance.
Only re-rendering certain components will make your program efficient and improve the overall performance of your React app.
Let’s make a simple application to demonstrate the use of the useMemo
hook.
The program below has the following components:
Increment
button: starts from 0
and increases the count by 1
.
Even num
button: starts from 2
and returns even numbers going forward.
An evenNumDoouble()
function that returns the twice value of the even number.
import React, {useState} from 'react';function Counter() {const [count, setCount] = useState(0);const [evenNum,setEvenNum] = useState(2)function evenNumDouble(){console.log("double");return evenNum * 2;}return (<div><h2>Counter: {count}</h2><h2>Even Numbers: {evenNum}</h2><h2>even Number Double Value: {evenNumDouble()}</h2><button onClick={() =>setCount(count+1)}>Increment</button><button onClick={()=>setEvenNum(evenNum+2)}>Even Numbers</button></div>)}export default Counter;
When we click the button Even Numbers
, the evenNumDouble()
function is called because the state of evenNum
is changed.
Clicking the Increment
button also renders the evenNumDouble()
function, although the count
state does not change.
This means that every time the evenNumDouble()
function is rendered unnecessarily (on the page), the code becomes less efficient. We will fix this with the useMemo
hook below.
import React,{useState, useMemo} from 'react'function Counter() {const [count, setCount] = useState(0);const [evenNum,setEvenNum] = useState(2)const memoHook = useMemo (function evenNumDouble(){console.log("double");return evenNum * 2;},[evenNum])return (<div><h2>Counter: {count}</h2><h2>Even Numbers: {evenNum}</h2><h2>even Number Double Value: {memoHook}</h2><button onClick={() =>setCount(count+1)}>Increment</button><button onClick={()=>setEvenNum(evenNum+2)}>Even Numbers</button></div>)}export default Counter
In the code above, we set the output of the evenNumDouble()
function into a constant memoHook
.
This filters the function through the useMemo
hook to only check if the specified variable (evenNum
in this case) has been changed; only then will this function be rendered.
Notice that the changing state variable is specified in square brackets at the end of the
useMemo
hook, similar to theuseEffect
hook.
If we run the code above, we will find that our code only runs the evenNumDouble()
function as required and not unnecessarily.
If you have a large codebase and your application is slow, then you can check whether there are any unnecessary renders on the page or not. If so, restrict them with the useMemo
hook; this speeds up your app and makes it more efficient.
Free Resources