The spread operator ... is an experimental level feature according to Visual Studio or ReSharper Intellisense and I am using ECMAScript 2015:

I am using Babel and I see the spread operator in the transpiled source:

So I trying to replace spread operator functionality for updating on object in React state with Object.assign.
Use the spread operator I can update the state of my object with:
setInputs(prevInputs => ({ ...prevInputs, [name]:value}));
This works great. Now I want to remove the spread operator to maximize cross browser compatibility.
Unfortunately when I try and update a value change to a property in my state object using other methods I get the error:
A component is changing a controlled input of type text to be uncontrolled. Input elements should not switch from controlled to uncontrolled
I understand what this error message means, what I cannot understand is what is different about my object update, compared to the spread operator, here is the ways I have tried to replace the spread operator:
if (value) {
//try to update state with value that is not undefined
setInputs(prevInputs => Object.assign({}, prevInputs)[name] = value);
//another try to update state with value that is not undefined
setInputs(prevInputs => prevInputs[name] = value);
}
I do not understand what is going on here, the spread operator is creating a new object:
const originalObj = {
name: '',
};
const spread = {...originalObj};
console.log('is originalObj === spread', originalObj === spread); //no they are not
How is my Object.assign way of replacing spread not closing mimicing the spread operator object creation?

originalObjto be the same (===) as the other object, the only way to do so is to actually mutate theoriginalObj, which should not be done (in React, at least)