<div id="root">
    <!-- This element's contents will be replaced with your component. -->
</div>
function ComponentWithUseMemo() {
  const refCount = React.useRef(0)
  
  function complexCalculation() {
    refCount.current ++
    return refCount.current
  }
  
  const value = React.useMemo(() => complexCalculation(), [])
  
  return (
    <div>ComponentWithUseMemo, value = {value}</div>
  );
}

function ComponentWithoutUseMemo() {
  const refCount = React.useRef(0)
  
  function complexCalculation() {
    refCount.current ++
    return refCount.current
  }
  
  const value = complexCalculation()
  
  return (
    <div>ComponentWithoutUseMemo, value = {value}</div>
  );
}

function App() {
  const [buttonState, setButtonState] = React.useState(false)
  const handleClickButton = () => {
    setButtonState(!buttonState)
  }
   
  return (
    <div>
      <button onClick={handleClickButton}>click</button>
      <ComponentWithoutUseMemo/>
      <ComponentWithUseMemo/>
    </div>
  )
}

ReactDOM.render(
  <App />, 
  document.getElementById("root")
);
View Compiled

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://unpkg.com/react/umd/react.development.js
  2. https://unpkg.com/react-dom/umd/react-dom.development.js