Как рассчитать общую цену продуктов на основе количества продуктов в Reactjs?

#javascript #reactjs #dictionary #google-cloud-firestore #shopping-cart

#javascript #reactjs #словарь #google-облако-firestore #корзина покупок

Вопрос:

Я создаю сайт электронной коммерции, используя React и firebase firestore для оттачивания своих навыков реагирования, но в течение нескольких дней я застрял в тихой проблеме. У меня есть компонент с именем IndividualCartProducts, который является результатом функции map в CartProducts. У IndividualCartProducts есть некоторый JSX-рендеринг. У меня есть тег выбора для выбора количества продукта в IndividualCartProducts, который изменяет цену этого конкретного продукта, но это жестко задано…Я сделал что-то подобное для достижения этой цели.

  <label htmlFor="CurrencySign">Rs</label>
 <input type="text" className='form-control'
  value={IndividualCart.ProductPrice * quantity} // this is what I mean with hardcoded
  required readOnly disabled/>
  

Я просто хочу рассчитать общую цену на основе количества продукта, но я понятия не имею, как это сделать. Я думаю, что это будет сделано путем манипулирования массивом, путем обновления цены этого конкретного продукта в зависимости от количества в этом массиве, но пока мне это не удается.

Выслушайте меня еще немного, у меня есть 3 компонента, связанные с моим вопросом: 1) appjs 2) CartsProducts 3) IndividualCartProducts.

в my IndividualCartProducts есть кнопка добавить в корзину, которая запускает функцию, и эта функция фактически получена как реквизит из appjs. В appjs в функции я получил всю информацию о продукте и отправил ее в firestore

  // add to cart
  addToCart = (ProductID, ProductName, ProductDescription, ProductPrice, ProductImg) => {
    auth.onAuthStateChanged(user => {
      if (user) {
        db.collection('cart '   user.uid).doc(ProductID).set({
          ProductID, ProductName, ProductDescription, ProductPrice, ProductImg
        }).then(() => console.log('successfully added to cart')).catch(err => console.log(err.message))
      }
      else {
        console.log('sign in first');
      }
    })
  }
  

затем в componentDidMount() я восстановил эти данные о товарах и обновил состояние корзины

 // getting cart data and setting state
    const cartProducts = this.state.Cart;
    auth.onAuthStateChanged(user => {
      if (user) {
        db.collection('cart '   user.uid).onSnapshot(snapshot => {
          let changes = snapshot.docChanges();
          changes.forEach(change => {
            if (change.type === 'added') {
              cartProducts.push({
                CartProductID: change.doc.id,
                ProductName: change.doc.data().ProductName,
                ProductDescription: change.doc.data().ProductDescription,
                ProductPrice: change.doc.data().ProductPrice,
                ProductImg: change.doc.data().ProductImg
              })
            }
            else if (change.type === 'removed') {
              for (var i = 0; i < cartProducts.length; i  ) {
                if (cartProducts[i].CartProductID === change.doc.id) {
                  cartProducts.splice(i, 1);
                }
              }
            }
            this.setState({
              Cart: cartProducts,
              noOfProductsInCart: this.state.Cart.length,
            })
            // console.log(this.state.Price);
          })
        })
      }
      else {
        console.log('user is not signed in to retrive cart data');
      }
    })
  

теперь я передал это состояние в CartProducts, применил функцию отображения их и вернул компонент с именем IndividualCartProducts и в их возврате JSX. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать, это мой первый вопрос здесь, и я тоже новичок в react. Любой намек, идея, логика, любой код будут высоко оценены

полный код можно найти здесь, на githubhttps://github.com/HamzaAnwar1998/EcommerceWithReact

Ответ №1:

Сохраните массив с ценой и количеством продукта и просто выполните цикл, чтобы рассчитать общее количество