我正在制作一个购物车应用程序,该应用程序的前端有React,状态管理的redux和后端有firebase。该应用程序已设置,因此您必须登录才能购物,因此每个购物车都特定于firebase随其身份验证系统提供的uid。
这是我必须考虑的项目数量的结构:
它采用users/uid/cart
的路径。逻辑是在添加商品时,我将商品ID推入ids
数组,并将quantity
设置为购物车中商品数量的数量。数量结构如下:
quantity: {
1 (item id): 2 (quantity)
}
但是,如您在代码段中所见,当购物车中未添加任何物品时,数量将设置为false而不是整数。但是,在第二个添加项上,它可以按预期的方式工作,但不能反映购物车中的前一个添加项。因此,如果我最初添加2,然后再添加1,那么当数量应该为3时,总数便等于1。
database
.ref(`users/${uid}/cart/quantity`)
.transaction(data => {
return data != null && {
...data,
[item.id]: value
}
})
以上是我添加到购物车数量的操作
case ADD_TO_CART:
return {
...state,
ids: [...state.ids, action.payload.id],
quantity: {
...state.quantity,
[action.payload.id]: state.quantity[action.payload.id] + action.payload.value
}
}
以上是我添加到购物车减速器
答案 0 :(得分:1)
第一次执行事务处理程序功能时,可以期望它收到一个空值。您的代码需要处理此问题。随后调用处理程序函数将从数据库接收当前值。
在特定情况下,当事务处理程序接收到空值时,由于data != null
的计算结果为false,并且下一个布尔值AND被短路,因此它返回空值。在data
为空的初始情况下,您需要做一些不同的事情,也许写0。