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

question-closed Ustawienie jako stan wartości wyrażenia - react.

Object Storage Arubacloud
+1 głos
107 wizyt
pytanie zadane 11 czerwca 2021 w JavaScript przez ShockWave Bywalec (2,350 p.)
zamknięte 11 czerwca 2021 przez ShockWave

Cześć mam pytanie jak przypisać wartość po przemnożeniu do stanu..

class App extends Component {
  constructor(props) {
    super(props);

  // const [amount, setAmount] = useState(0);
  // const [currency, setCurrency] = useState("EUR");
  // const [rates, setRates] = useState({EUR:0,USD:0,CHF:0})
  this.state = {
    rates: {
      EUR: 0,
      USD: 0,
      CHF: 0,
    },
amount: 0,
currency: "",
exchangeAmount: 0,
}

 

Tutaj tworzę stan po czym przypisuje do nich wartości z API w funkcji componentDidMount

exchangeAmountFn = () => {
    this.setState({ exchangeAmount: })
{
 

tu chcę napisać funkcję, która obliczy wartość złotego po kursie i chciałem to zrobić w postaci "rates[currency] * amount", lecz nie działa.

Z góry dziękuję za pomoc.

komentarz zamknięcia: Rozwiązanie w komentarzu

1 odpowiedź

+1 głos
odpowiedź 11 czerwca 2021 przez ScriptyChris Mędrzec (190,190 p.)
wybrane 11 czerwca 2021 przez ShockWave
 
Najlepsza

Jeśli próbowałeś obliczać stan za pomocą hooke'ów, to ich można używać tylko w komponencie funkcyjnym, a w powyższym kodzie korzystasz z komponentu klasowego. Kompilator Reacta powinien rzucić błędem - jeśli tego nie robi, to zainstaluj sobie ESLint z pluginem do Reacta; albo React w przeglądarce powinien rzucić warningiem o nieprawidłowym użyciu hooków.

Przy wyliczaniu stanu weź też pod uwagę, że React robi to asynchronicznie, więc może Ci się przydać funkcyjne aktualizowanie stanu.


Jeśli to nie jest przyczyną problemu, to napisz co konkretnie nie działa.

komentarz 11 czerwca 2021 przez ShockWave Bywalec (2,350 p.)
Jak próbuje obliczyć to za pomocą "rates[currency] * amount" to wywala błąd, pytanie jak to zapisać w komponencie.
1
komentarz 11 czerwca 2021 przez ScriptyChris Mędrzec (190,190 p.)

Jaki błąd? Jak konkretnie próbowałeś to zapisać? W ten sposób:

this.setState({ exchangeAmount: rates[currency] * amount })

, to na oko nie zadziała, ponieważ zmienne rates, currency i amount próbujesz odczytać lokalnie, a one są dostępne w obiekcie stanu. Bardziej w ten sposób:

this.setState({ exchangeAmount: this.state.rates[this.state.currency] * this.state.amount })

 

1
komentarz 11 czerwca 2021 przez ShockWave Bywalec (2,350 p.)
Dzięki wielkie, działa :D
komentarz 11 czerwca 2021 przez ShockWave Bywalec (2,350 p.)
Mam jeszcze pytanie, apropo tej asynchroniczności. Bo teraz gdy klikam w button to najpierw dostaje NaN, dopiero gdy za drugim razem kliknę to dostaję wartość po przeliczeniu. Czy to poprostu kwestia wywołania tego fetcha szybciej?
komentarz 11 czerwca 2021 przez ShockWave Bywalec (2,350 p.)
Dobra, jednak problem leżał w czymś innym :D

Podobne pytania

0 głosów
1 odpowiedź 126 wizyt
pytanie zadane 18 sierpnia 2020 w JavaScript przez rob Bywalec (2,440 p.)
0 głosów
1 odpowiedź 96 wizyt
pytanie zadane 2 sierpnia 2020 w JavaScript przez rob Bywalec (2,440 p.)
0 głosów
1 odpowiedź 85 wizyt
pytanie zadane 3 maja 2020 w JavaScript przez robertos18 Obywatel (1,120 p.)

92,572 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...