Приложение возвращает false как значение вместо числа - PullRequest
0 голосов
/ 01 июля 2018

Я делаю приложение для корзины покупок с реакцией на переднем конце, избыточностью для управления состоянием и базой данных на заднем конце. Приложение настроено так, что вам необходимо войти в систему, чтобы делать покупки, чтобы каждая корзина была привязана к идентификатору пользователя, который Firebase предоставляет своей системе аутентификации.

Это структура, которую я должен учитывать для количества товара:

enter image description here

Он занимает путь 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
    }
  }

Выше моя добавка в корзину редуктор

1 Ответ

0 голосов
/ 01 июля 2018

При первом запуске функции обработчика транзакций вы можете ожидать, что она получит нулевое значение. Ваш код должен справиться с этим. Последующие вызовы функции-обработчика получат текущее значение из базы данных.

В вашем конкретном случае, когда ваш обработчик транзакции получает нулевое значение, он возвращает нулевое значение, так как data != null оценивает значение false, а следующее логическое И короткое замыкание. Вам нужно сделать что-то другое в исходном случае, когда data равно нулю, возможно, напишите количество 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...