• 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

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
68 wizyt
pytanie zadane 1 października 2022 w JavaScript przez ferdynand Obywatel (1,160 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,510 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 (245,430 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,160 p.)
funkcja addPrice odpowiada za renderowanie ceny po wybraniu ilosci danego produktu.
komentarz 5 października 2022 przez ferdynand Obywatel (1,160 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
0 odpowiedzi 81 wizyt
pytanie zadane 5 lutego 2022 w JavaScript przez trixter310 Obywatel (1,440 p.)
0 głosów
0 odpowiedzi 101 wizyt
0 głosów
1 odpowiedź 102 wizyt

90,303 zapytań

138,899 odpowiedzi

311,089 komentarzy

60,019 pasjonatów

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...