<div id="root"></div>
body {
  height: 100vh;
  margin: 0;
  display: grid;
  place-items: center;
}

.box {
  border: 1px solid black;
  margin: 10px;
  text-align: center;
  padding: 10px;
  width: 400px;
}

.values {
  padding: 10px;
}

button {
  margin-left: 10px;
}
const { useState, useRef } = React;

const MyComponent = () => {
  const [stateExp, setStateExp] = useState(1000);
  const refExp = useRef(1000);
  
  const spendStateMoney = () => setStateExp(prevVal => prevVal - 1);
  
  const spendRefMoney = () => {
    refExp.current = refExp.current - 1;
    console.log('refExp.current', refExp.current);
  };
  
  return (
    <section className="box">
      <div className="values">
        <span>useState value: ${stateExp}</span>
        <button onClick={spendStateMoney}>Spend</button>
      </div>
      <div className="values">
        <span>useRef value: ${refExp.current}</span>
        <button onClick={spendRefMoney}>Spend</button>
      </div>
    </section>
  )
}

ReactDOM.render(<MyComponent />, document.getElementById('root'))
View Compiled

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://cdnjs.cloudflare.com/ajax/libs/react/16.8.6/umd/react.production.min.js
  2. https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.6/umd/react-dom.production.min.js