【发布时间】:2020-03-03 12:47:27
【问题描述】:
我正在开发一个 React 购物车,我正在尝试根据我在解释我的问题后展示的数组来完成以下操作:
1) 我正在尝试检查客户端请求的大小是否可用。
2) 如果它不可用,我想运行一个函数:
2A) 将所选对象添加到数组中。
2B) 在随后的每次点击中,我都想更新库存,以确保它提醒客户该商品不再有库存,并且我想将一个我想称为“数量”的新元素增加一个.
3) 这是我当前的尺寸数组:
[ 0: size: 3 stock: 140
_id: "5d903adb01cdab06932b5566"
1: size: 3.5 stock: 130
_id: "5d903adb01cdab06932b5565"
2: size: 4 stock: 10
_id: "5d903adb01cdab06932b5564"
3: {_id: "5d903adb01cdab06932b5563", size: 4.5, stock: 30}
4: size: 5 stock: 53
_id: "5d903adb01cdab06932b5562" ]
4) 这些是我正在运行的函数:
onClick={() => this.alertBox(prod, arr, item)}
alertBox = (product, products, count) => {
console.log(count)
let newStock;
let clickedSize;
let selectedProduct;
if (product.stock === 0) {
alert('The item is currently out of stock')
} else {
newStock = product.stock -= 1;
clickedSize = product.size;
selectedProduct = product._id;
let newProducts;
let quantity = 0;
products.map((item) => {
return item._id === product._id ?
newProducts = [...this.state.chosenSize , {...item, ...newStock }]
: product
});
const tester = [];
const result = [];
const newSize = [];
let quantities = [];
let items;
let newIt;
newProducts.forEach(function(el) {
if (tester.indexOf(el._id) === -1) {
tester.push(el._id)
result.push(el)
items = {...el}
}
});
let newArray = result.map((item, i) => Object.assign({}, item, item.stock -= 1));
this.setState(prevState => ({
chosenSize: newArray
}))
}
}
和
onClick={() => this.onUpdateItem(idx, arr, prod)}
onUpdateItem = (i, product, prod) => {
let newProd = product.stock;
this.setState({
chosenSize: product.map(el => (el._id === prod._id ? Object.assign({}, el, el.stock -= 1) : el))
});
};
7) 我希望对象在每次点击后更新为类似的内容。
3:{_id:“5d903adb01cdab06932b5563”,尺寸:4.5,库存:30,数量: 1 }
到
3:{_id:“5d903adb01cdab06932b5563”,尺寸:4.5,库存:29,数量: 2 }
到
3:{_id:“5d903adb01cdab06932b5563”,尺寸:4.5,库存:28,数量: 3 }
这是该项目的代码沙箱,尽管出于某种原因它不再呈现我的组件。代码在 ProductPage 文件 codesandbox.io/s/mystifying-roentgen-7mp0t 中。
编辑
抱歉,代码沙箱现在可以工作了,您只需单击其中一项,它就会带您进入产品页面 http://codesandbox.io/s/mystifying-roentgen-7mp0t
【问题讨论】:
-
您可以撤消并检查是什么使您的代码运行并与新版本进行比较吗?
-
等一下,对不起,撤消是什么意思?您的意思是删除其中一项功能吗?
-
“不再渲染我的组件” - 恢复到渲染的时间并检查发生了什么变化。如果您能告诉我们您添加了哪些更改,我们将很容易调试。
-
哦,明白了,沙盒
-
老板现在可以使用了!您只需单击其中一项,它就会将您带到具有尺寸的项目!
标签: javascript arrays reactjs react-native react-redux