1

I have some inputs defined in react. I'm assigning a function to their onChange function. I can find the current value. How can I get the old value in simplest way?

The reason I want this is because I want to find the ratio of this new value to the old value and do some operations.

Sample code:

let onChange = (e) => {
    let newValue = e.target.value; // let oldValue = will be here     

}

<Input type="number"  onChange={onChange }></Input>
Brian Tompsett - 汤莱恩
  • 5,438
  • 68
  • 55
  • 126
HAMDİ DAMAR
  • 49
  • 1
  • 9

2 Answers2

3

If the old value is not needed in the component state, use a ref like the following, you can change its initial value

const oldValueRef = React.useRef(0)

let onChange = (e) => {
    const oldValue = oldValueRef.current;
    let newValue = e.target.value; // let oldValue = will be here

    // after everything     
    oldValueRef.current = e.target.value;
}

<Input type="number" onChange={onChange }></Input>
iunfixit
  • 910
  • 1
  • 15
  • i was able to do it by applying the solution [here](https://stackoverflow.com/questions/54633690/how-can-i-use-multiple-refs-for-an-array-of-elements-with-hooks) thanks – HAMDİ DAMAR Aug 24 '21 at 05:06
2

You can use a state to do it:

const [state, setState] = useState("");

let onChange = (e) => {
  let oldValue = state; 
  let newValue = e.target.value;
  setState(newValue)
  // your logic
};

<Input type="number" value={state} onChange={onChange}></Input>;
Viet
  • 10,853
  • 2
  • 10
  • 17