Memo 1

Memo

Memo 2

Función memo

Cuando usemos la función memo, el componente sólo se renderizará si cambian sus props, en lugar de cuando se actualice el componente padre.

import { memo } from 'react';

const ComponenteMemo = ({ count1 }) => {

    console.log('Se actualiza el componente con Memo (ComponenteMemo), pero sólo cuando cambien sus props (count1)', count1, 'no cuando cambie el componente padre');

    return <div>
        <h2>Como puedes ver en la consola, este componente (ComponenteMemo) se renderizará sólo cuando se actualicen sus props</h2>
        <p>{count1}</p>
    </div>
}

export default memo(ComponenteMemo);

Función memo con dos parámetros

El ComponenteMemo se actualizará shólo cuando su método shouldNotRender devuelva false.

App.js
import { useState } from 'react';
import ComponenteMemo from './ComponenteMemo';


const App = () => {
    const [count1, setCount1] = useState(0);
    const [count2, setCount2] = useState(0);

    return (
        <div>

            <button onClick={() => setCount1(count1 + 1)}>Aumentar count1: {count1}</button>

            <button onClick={() => setCount2(count2 + 1)}>Aumentar count2: {count2}</button>

            <ComponenteMemo count1={count1} count2={count2} />
        </div>
    )
}

export default App;
ComponenteMemo
import { memo } from 'react';

const Componente = ({ count1, count2 }) => {
    console.log('Se actualiza el componente con Memo', count1, '---', count2);
    return <div>
        <h2>Este componente se renderizará sólo cuando se actualicen sus props</h2>
        <p>{count1}</p>
        <p>{count2}</p>
    </div>
}

const shouldNotRender = (prevProps, nextProps) => nextProps.count1 > nextProps.count2;


export default memo(Componente, shouldNotRender);