3 回答
TA贡献1802条经验 获得超10个赞
正如所讨论的,您可以创建一个方法并添加到现有数组中并设置组件状态。
class SomeComponent {
constructor(){
this.state.products =[]
}
onAddProduct(item) {
this.setState({
products: this.state.products.concat({name: item, quantity: 1})
})
}
onAddProductByName(name) {
this.setState({
products: this.state.products.map(item => {
if(item.name === name) item.quantity +=1
return item
})
})
}
}
TA贡献1821条经验 获得超6个赞
添加值后使用Array.push不会创建新数组。您可以在浏览器控制台中对此进行测试:
let arr = []
let arrCopy = arr
arr.push(1) // [1]
arr === arrCopy // true
arr = [...arr, 2] // [1, 2]
arr === arrCopy // false
由于 React===在内部使用比较状态并决定重新渲染,如果您使用 arr.push({ name: "item 3", amount: 1 }),UI 将不会更新。相反,您需要每次按下按钮(处理 onClick 事件)时创建一个新数组,复制旧值并添加新值。
TA贡献1818条经验 获得超8个赞
尝试这个:
let counter = 1
let items = []
function setNewItem() {
items.push({name: `item ${counter}`, quantity: 1})
counter++
}
- 3 回答
- 0 关注
- 107 浏览
添加回答
举报