I want to pass and set values using React useStates, however it doesn't pass anything.
const initialValue = {
id: 0,
name: "",
type: "",
time: "",
location: "",
material: "", // <- Want to change this separately.
massPercent: "", // <- Want to change this separately.
}
const [values, setValues] = useState(initialValue); // <- Triggered when textfields have inputs.
const handleInputChange = e => {
const { name, value } = e.target
setValues({
...values,
[name]: value
})
}
let materialElements = {
material: values.material, // <- changes as i type new values
massPercent: values.massPercent, // <- changes as i type new values
};
// these values change using a useState [values, setValues]
console.log(materialElements);
const [materialValues, setMaterialValues] = useState(materialElements);
console.log("useState [materialValues]: ", materialValues);
if (values.id === 0) {
// New Values
EventStorage.addMaterialData(materialValues);
} else {
// Existing Values
EventStorage.updateMaterialData(materialValues);
}
HTML (Not Really Important)
<Grid container direction="row" spacing={2}>
<Grid item xs={12} sm={6}>
<Selection
name="material"
label="Material"
value={values.material}
onChange={handleInputChange}
/>
</Grid>
<Grid item xs={12} sm={6}>
<InputField
name="massPercent"
label="Percent of Mass"
inputMode={"numeric"}
pattern="[0-9]*"
value={values.massPercent}
onChange={handleInputChange}
/>
</Grid>
</Grid>
Picture: When values change, the console log for materialElements
shows this.
[![Console Log][1]][1]
But my problem is here. I am trying to pass materialElements
as initial values for this useState.
const [materialValues, setMaterialValues] = useState(materialElements);
console.log("useState [materialValues]: ", materialValues);