React

React Logo

React Basics: useMemo & useCallback Hooks

useMemo invokes the function then caches result. useCallback caches the function and only runs it if the dependency (included in []) changes (usually a state or props value).

Basic code to implement useMemo and useCallback hooks.

ParentComponent.js

//import this file into App.js
import React, {useState, useCallback} from 'react'
import Count from './Count'
import Button from './Button'
import Title from './Title'


function ParentComponent() {
    const [age, setAge] = useState(25)
    const [salary, setSalary] = useState(50000)

    const incrementAge = useCallback (() => {
        setAge(age + 1)
    },[age])

    const incrementSalary = useCallback(() => {
        setSalary(salary + 1000)
    }, [salary])

    return (
        <div>
            <Title />
            <Count text="Age" count={age} />
            <Button handleClick={incrementAge}>
            Increment Age</Button>
            <Count text="Salary" count={salary} />
            <Button handleClick={incrementSalary}>
            Increment Salary</Button>
        </div>
    )
}

export default ParentComponent 


Count.js

import React from 'react'

function Count({text, count}) {
    return (
        <div>
            {text} is {count}
        </div>
    )
}

export default React.memo(Count) 


Title.js

import React from 'react'

function Title() {
    console.log('Rendering title component');
    return (
        <div>
            <h2>useCallback Hook</h2>
        </div>
    )
}

export default React.memo(Title) 


Button.js

import React from 'react'

function Button({handleClick, children}) {
   
    return (
        <button onClick={handleClick}>
            {children}
        </button>
    )
}

export default React.memo(Button)