• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z renderowaniem ceny w React

VPS Starter Arubacloud
0 głosów
203 wizyt
pytanie zadane 1 października 2022 w JavaScript przez ferdynand Obywatel (1,250 p.)

Dzień dobry ,

Mam zagwozdke z wyświetlaniem ceny w aplikacji, więc po dodaniu produktow do koszyka, chce, aby użytkownik miał opcje zmiany ilośći produktu.

Wszystko działa jak powinno, dopóki nie dodam wiekszej ilości rzeczy do koszyka. Po wybraniu ilości danego itemu w innych itemach cena tez sie zmiania i wyświetlają mi sie straszne bzdury. Czy ktoś mógłby naprowadzić mnie na rozwiązanie tego błedu. 

function CartItems ( {cart} ) {
  const [addPrice, setAddPrice] = useState(0)

  const handlePrice = (e) => {
    let selectedValue = e.target.value;
    let price = cart.map((item) => selectedValue * item.price);
    setAddPrice(price);
    console.log(addPrice)
  }

  return (
    <div  className='cart_item'>
      {cart.map((item, id) => (
        <div key={id} className='cart_item--item'>
           <div className="cart_item--image">
                <img
                  className="cart_item_image--img"
                  src={item.image}
                  alt="/"
                ></img>
              </div>
              <div className='cart_item--content'>
              <h3 className="cart_item--h3">{item.title}</h3>
              <select className='item_amount' onChange={handlePrice}>
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                <option value="5">5</option>
                <option value="6">6</option>
                <option value="7">7</option>
                <option value="8">8</option>
                <option value="9">9</option>
                <option value="10">10</option>
              </select>
              <p className="cart_item--price"> Price: {!addPrice ? item.price : addPrice}
                <span>{<BiEuro />}</span></p>
                <button>Remove from cart</button>
              </div>
        </div>
      ))}
    </div>
  )
}

export default CartItems

 

1 odpowiedź

+1 głos
odpowiedź 1 października 2022 przez Bosswell Nałogowiec (36,470 p.)
wybrane 2 października 2022 przez ferdynand
 
Najlepsza
let price = cart.map((item) => selectedValue * item.price);

W tym miejscu lecisz po wszystkich przedmiotach z koszyka i zwiększasz ich ilość.
To co chcesz uzyskać to zmiana ilości i tym samym ceny tylko dla konkretnego przedmiotu.
Dla danego select-a musisz przekazać identyfikator produktu. Następnie w handlePrice wyciągnij ten id przedmiotu i przy mapowaniu koszyka zaaktualizuj cene tam gdzie to potrzebne
 

komentarz 1 października 2022 przez Wiciorny Ekspert (266,940 p.)

to zależy od tego czym jest obiekt "cart" może to być tablica 1 elementowa z konkretnym tym jednym przedmiotem, wtedy generalnie mutuje wartość zwracając ją do zmiennej. 

nasuwa się też pytanie co robi funkcja setAddPrice(price); // ustawia, dodaje? modyfikuje cos moze niepoprawnie? 
 

**Edit: faktycznie jest to całą karta, nie pojedynczy element. 

komentarz 2 października 2022 przez ferdynand Obywatel (1,250 p.)
funkcja addPrice odpowiada za renderowanie ceny po wybraniu ilosci danego produktu.
komentarz 5 października 2022 przez ferdynand Obywatel (1,250 p.)
edycja 5 października 2022 przez ferdynand

@Bosswell,  zrobiłem tak jak mówiłeś, albo tak mi sie wydaje :p

 const handleValue = (id, e) => {
    let selectedValue = e.target.value;
    let currentPrice = cart.filter((item) => item.id === id).map((item) =>  selectedValue * item.price)
    console.log(currentPrice)
  }

, po kliknieciu w konkretny select produktu wyswietla mi jego cene w tablicy, za kazdym razem kiedy klikne inny to pokazuje mi tylko jeden, wlasnie ten klikniety i to mi chodzilo, sorry, że tak to opisuje,ale juz poprostu głowa puchnie :p.

Ale teraz znów pojawił sie problem, kiedy mam pare item-ow w koszyku i klikne konkretny select wybierając ilosc to cene wybranego selectu w item-ie przypisuje mi do wszystkich pozostałych i renderuje sie tylko ta cena.

 <p className="cart_item--price"> {`Price: ${item.price}`}

 

Podobne pytania

0 głosów
1 odpowiedź 210 wizyt
pytanie zadane 23 kwietnia 2023 w JavaScript przez Yorweth Obywatel (1,310 p.)
0 głosów
0 odpowiedzi 192 wizyt
pytanie zadane 5 lutego 2022 w JavaScript przez trixter310 Obywatel (1,440 p.)
0 głosów
0 odpowiedzi 310 wizyt

92,304 zapytań

141,108 odpowiedzi

318,584 komentarzy

61,756 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...