Search
 
SCRIPT & CODE EXAMPLE
 

JAVASCRIPT

usememo hook react

import React, { memo, useMemo, useState } from 'react'

const Heading = memo(({ style, title }) => {
  console.log('Rendered:', title)

  return <h1 style={style}>{title}</h1>
})

export default function App() {
  const [count, setCount] = useState(0)

  const normalStyle = {
    backgroundColor: 'teal',
    color: 'white',
  }

  const memoizedStyle = useMemo(() => {
    return {
      backgroundColor: 'red',
      color: 'white',
    }
  }, [])

  return (
    <>
      <button
        onClick={() => {
          setCount(count + 1)
        }}
      >
        Increment {count}
      </button>
      <Heading style={memoizedStyle} title="Memoized" />
      <Heading style={normalStyle} title="Normal" />
    </>
  )
}
Comment

react usememo

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

Returns a memoized value.

Pass a “create” function and an array of dependencies. useMemo will only recompute the memoized value when one of the dependencies has changed. This optimization helps to avoid expensive calculations on every render.

Remember that the function passed to useMemo runs during rendering. Don’t do anything there that you wouldn’t normally do while rendering. For example, side effects belong in useEffect, not useMemo.

If no array is provided, a new value will be computed on every render.

You may rely on useMemo as a performance optimization, not as a semantic guarantee. In the future, React may choose to “forget” some previously memoized values and recalculate them on next render, e.g. to free memory for offscreen components. Write your code so that it still works without useMemo — and then add it to optimize performance.
Comment

React useMemo Hook

//A poor performing function. The expensiveCalculation function runs on every render
import { useState } from "react";
import ReactDOM from "react-dom/client";

const App = () => {
  const [count, setCount] = useState(0);
  const [todos, setTodos] = useState([]);
  const calculation = expensiveCalculation(count);

  const increment = () => {
    setCount((c) => c + 1);
  };
  const addTodo = () => {
    setTodos((t) => [...t, "New Todo"]);
  };

  return (
    <div>
      <div>
        <h2>My Todos</h2>
        {todos.map((todo, index) => {
          return <p key={index}>{todo}</p>;
        })}
        <button onClick={addTodo}>Add Todo</button>
      </div>
      <hr />
      <div>
        Count: {count}
        <button onClick={increment}>+</button>
        <h2>Expensive Calculation</h2>
        {calculation}
      </div>
    </div>
  );
};

const expensiveCalculation = (num) => {
  console.log("Calculating...");
  for (let i = 0; i < 1000000000; i++) {
    num += 1;
  }
  return num;
};

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<App />);
Comment

PREVIOUS NEXT
Code Example
Javascript :: electron ipcmain send 
Javascript :: babel minify plugin 
Javascript :: how to install react js 
Javascript :: window parent frames 
Javascript :: unshift javascript 
Javascript :: axios send payload in get request 
Javascript :: !! js 
Javascript :: web3.js tutorials 
Javascript :: get full height of element javascript 
Javascript :: generate random password 
Javascript :: match if 
Javascript :: create javascript for loop 
Javascript :: nesting arrays javascript 
Javascript :: asynchronous javascript 
Javascript :: javascript object/function which you want to proxy 
Javascript :: value js 
Javascript :: addeventlistener 
Javascript :: json api demo 
Javascript :: javascript if return true false 
Javascript :: do while loop javascript 
Javascript :: mergesort 
Javascript :: var json = $.parseJSON(request.responseText); 
Javascript :: notify js 
Javascript :: how to add variables to an array in javascript 
Javascript :: javascript hashtable 
Javascript :: react animations 
Javascript :: javascript this keyword 
Javascript :: lodash template literal 
Javascript :: node.js Readable Streams 
Javascript :: how to download array of files from aws s3 using aws sdk in nodejs 
ADD CONTENT
Topic
Content
Source link
Name
4+9 =