Почему я не могу присвоить значения переменным объекта? - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть форма на моем веб-сайте с onSubmit eventListener, поэтому, когда пользователь отправляет форму, выполняется функция getCurrencyData.внутри функции getCurrencyData я проверяю, ввел ли пользователь значение или нет, если да, то я делаю apicall и разрушаю объект generalCurrencyInfo.Проблема в том, что я не могу присвоить значения переменным деструктурированного объекта.

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      generalCurrencyInfo: {
        fullName: undefined,
        name: undefined,
        imageUrl: undefined,
        price: undefined,
        error: false
      }
    }
  }


getCurrencyData = async (e) => {
    e.preventDefault();
    const CURRENCYNAME = e.target.elements.currencyName.value.toUpperCase();
    //Checks if currency name is not empty
    if (CURRENCYNAME) {
      const APICALL = await fetch(`url`);
      const DATA = await APICALL.json();
      let generalCurrencyInfo = {
        fullName:undefined,
        name: undefined,
        imageUrl: undefined,
        price: undefined,
        error: false
      }
//this destructuring doesn't work
      let {fullName, name, imageUrl, price, error} =generalCurrencyInfo;
      if (DATA.Message === "Success") {
        fullName = DATA.Data[0].CoinInfo.FullName;
        name = DATA.Data[0].CoinInfo.Name;
        imageUrl = `url`;
        price = "price";
        error = false;
      } 
      this.setState({
        generalCurrencyInfo: generalCurrencyInfo
      })
    } 
  }
  render() {
    return (

    );
  }
}

1 Ответ

1 голос
/ 12 апреля 2019

Вы создали 5 новых переменных здесь:

  let {fullName, name, imageUrl, price, error} =generalCurrencyInfo;

Затем вы изменили эту переменную, но не объект generalCurrencyInfo:

  if (DATA.Message === "Success") {
    fullName = DATA.Data[0].CoinInfo.FullName;
    name = DATA.Data[0].CoinInfo.Name;
    imageUrl = `url`;
    price = "price";
    error = false;
  } 

Здесь вы задали generalCurrencyInfo, что не изменилось:

this.setState({
  generalCurrencyInfo: generalCurrencyInfo
})

Это будет хорошо:

this.setState({
    fullName,
    name,
    imageUrl,
    price,
    error,
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...