Первый вызов извлечения возвращает пустой вызов массива, но работает на втором и так далее? - PullRequest
0 голосов
/ 15 ноября 2018

Как упомянуто выше, всякий раз, когда я выбираю данные для установки значения в состояние, он устанавливает состояние только во второй раз, когда я ввожу сумму сбора, валюту и fysigned поля. Мой главный вопрос: почему он выбирает пустой массив при первом вводе значений в эти поля? Первый раз значение не определено enter image description here enter image description here

CODE

setUSDValue() {
const { AmountCharged, Currency, FYSigned} = this.state;

if(AmountCharged && Currency && FYSigned)
{
  fetch(`http://ca-fpscfb2:2000/USDValueExchangeRateValue?rateYear=${FYSigned}&USD=${Currency}&CAD=${Currency}&INR=${Currency}&GBP=${Currency}`)
  .then(response => response.json().then(response =>  
    this.setState(
    { 
      exchangeRateVal: response.data 

    }

    )))
  .then( 
    this.state.exchangeRateVal && this.state.exchangeRateVal.map((rate) =>
    (
      this.setState({
        USDValue: rate.USD
      })
    ))  
  )
}




}

1 Ответ

0 голосов
/ 15 ноября 2018

Проблема в том, что состояние не обновляется сразу при вызове this.setState. Попробуйте использовать функцию обратного вызова, если вам нужно, чтобы этот код запускался сразу после обновления состояния:

setUSDValue() {
const { AmountCharged, Currency, FYSigned} = this.state;

if(AmountCharged && Currency && FYSigned)
{
  fetch(`http://ca-fpscfb2:2000/USDValueExchangeRateValue?rateYear=${FYSigned}&USD=${Currency}&CAD=${Currency}&INR=${Currency}&GBP=${Currency}`)
  .then(response => response.json().then(response =>  
    this.setState(
    { 
      exchangeRateVal: response.data 

    },
    () =>
    this.state.exchangeRateVal.map((rate) =>
    (
      this.setState({
        USDValue: rate.USD
      })
    ))  

    )))
}
...