Я делаю приложение для корзины покупок с реакцией на переднем конце, избыточностью для управления состоянием и базой данных на заднем конце. Приложение настроено так, что вам необходимо войти в систему, чтобы делать покупки, чтобы каждая корзина была привязана к идентификатору пользователя, который Firebase предоставляет своей системе аутентификации.
Это структура, которую я должен учитывать для количества товара:
![enter image description here](https://i.stack.imgur.com/mvILJ.png)
Он занимает путь users/uid/cart
. Логика заключается в том, что при добавлении товара я помещаю идентификатор товара в массив ids
и устанавливаю quantity
равным количеству товаров в корзине. Количественная структура выглядит следующим образом:
quantity: {
1 (item id): 2 (quantity)
}
Но, как видно из фрагмента, при отсутствии товаров, добавленных в корзину, количество устанавливается в значение false вместо целого числа. Тем не менее, на втором добавлении, он работает так, как и должно, но не отражает предыдущее добавление в корзину. Так что, если я сначала добавлю 2, а затем добавлю 1 после этого, это будет общее количество до 1, когда оно должно быть 3.
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
}
}
Выше моя добавка в корзину редуктор