应用程式传回false作为值,而不是数字

时间:2018-06-30 21:40:43

标签: reactjs firebase firebase-realtime-database redux

我正在制作一个购物车应用程序,该应用程序的前端有React,状态管理的redux和后端有firebase。该应用程序已设置,因此您必须登录才能购物,因此每个购物车都特定于firebase随其身份验证系统提供的uid。

这是我必须考虑的项目数量的结构:

enter image description here

它采用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
    }
  }

以上是我添加到购物车减速器

1 个答案:

答案 0 :(得分:1)

第一次执行事务处理程序功能时,可以期望它收到一个空值。您的代码需要处理此问题。随后调用处理程序函数将从数据库接收当前值。

在特定情况下,当事务处理程序接收到空值时,由于data != null的计算结果为false,并且下一个布尔值AND被短路,因此它返回空值。在data为空的初始情况下,您需要做一些不同的事情,也许写0。