React не знает, что вы обновили состояние.
При обновлении состояний с помощью реакции используйте this.setState(/* new value */)
.
Ваш код должен выглядеть следующим образом:
handleOnClick(e) {
this.setState({
// just materials. the other keys will not be affected.
materials: [
...this.state.materials,
this.state.selectedMaterialUnitID,
this.state.quantity,
this.state.unitPrice,
this.state.total,
]
});
// this will show the old state now, since updating the state is asynchronous.
console.log(this.state.materials);
}
Если вы хотите, чтобы ваш console.log отражал состояние после обновления, вы можете использовать второй параметр setState, например, так:
handleOnClick(e) {
this.setState({
materials: [
...this.state.materials,
this.state.selectedMaterialUnitID,
this.state.quantity,
this.state.unitPrice,
this.state.total,
]
},
(state) => {
console.log(state.materials);
}
);
}
Я не уверен, как ваш метод .push
будетработать со всеми этими дополнительными параметрами, но я надеюсь, что вы поняли.Если вы хотите добавить новый объект в массив, просто добавьте соответствующие разделители и ключи.
Изменить, чтобы добавить: проверьте эту ссылку, чтобы узнать, почему не следует обновлять состояние напрямую: https://reactjs.org/docs/state-and-lifecycle.html#do-not-modify-state-directly