对象在 onClick 后不断将大小重置为数组

object keeps resetting size into array after onClick

我正在尝试提交表单,但是,当我在更改大小值的同时再次提交时,它会覆盖第一个对象的 selection。我正在使用 react-redux。在传递第二个数组之前,我尝试使用逻辑 select 正确的值。这些是我的代码。

    var roastedHazelnutLatte = {
    name:'Roasted Hazelnut Latte',
    size: 0,
    price:5,
    regularQty:0,
    oatlyQty:0,
    customisation: ''
} 

//drink size
const roastedHazelnutSize = e => {
    var{name,value} = e.target;
    var value = parseInt(value,10)
    roastedHazelnutLatte.size = value
}
//drink quantity
const roastedHazelnutRegularQty = e => {
    var {name,value} =e.target;
    var value = parseInt(value,10)
    roastedHazelnutLatte.regularQty = value
}
const roastedHazelnutOatlyQty = e => {
    var{name,value} = e.target
    var value = parseInt(value,10)
    roastedHazelnutLatte.oatlyQty = value
}
//drink customisation
const roastedHazelnutCustomisation = e => {
    const {name,value}=e.target;
    roastedHazelnutLatte.customisation = value
}
//on click add name of drink: hazelnut latte
const addHazelnutLatte = e => {
    e.preventDefault()
    addItem.orders.push(roastedHazelnutLatte)
    console.log(addItem)
}`

下拉代码:

<Input type='select' name='size' onChange={e=>roastedHazelnutSize(e)}>
    <option>Select</option>
    <option value={300}>300ml</option>
    <option value={1000}>1L</option>
</Input>

点击代码:

<Button onClick={e=>addHazelnutLatte(e)}> Add</Button>

我正在考虑设置状态。但我也不太确定该怎么做。

数组中第一个对象发生变化的原因是 roastedHazelnutLatte 对象引用始终保持不变,即使您将它推入数组 orders。 您应该将函数更新为这个

const addHazelnutLatte = e => {
    e.preventDefault()
    addItem.orders.push({...roastedHazelnutLatte})
    console.log(addItem)
}

举个例子

const obj ={a: 1, b: 2}
const arr = []
arr.push(obj)
obj.a = 5;
arr.push(obj)
console.log(arr) // would result [a: 5, b: 2}, a: 5, b: 2}]

要解决此问题,您可以使用 ES6 扩展运算符创建一个新对象,或者,Object.assign 但这又会在对象上进行浅拷贝而不是深拷贝。

const obj ={a: 1, b: 2}
const arr = []
arr.push({...obj})
obj.a = 5;
arr.push({...obj})
console.log(arr) // would result [a: 1, b: 2}, a: 5, b: 2}]