Невозможно прочитать свойство undefined, но оно определено - PullRequest
0 голосов
/ 15 марта 2019

У меня есть функция componentDidMount:

componentDidMount() {
    const { insurances } = this.props;
    const insuranceId = this.props.match.params.id;

    const insurance = insurances.find(insurance => insurance.id == insuranceId);

    this.setState({ insurance: insurance }, () => {
      console.log("insurance", this.state.insurance.tip); <--- this is what i am talking about
    });
  }

Это console.log() возвращает объект. Но если я изменяю его на console.log(this.state.insurance.tip), который является одним из свойств, я получаю ошибку: TypeError: Невозможно прочитать свойство 'tip' из undefined . Я не очень понимаю, как работает монтаж. Может быть потому, что он не установлен? Если да, то как мне это исправить?

EDIT

console.log ('insurance', insurance), до того как setState будет активен:

id: 1, user_id: 1, tip: "Asigurare", date_exp: "1974-10-14", date_notif: "1975-10-03", …}
created_at: "2019-03-15 10:54:40"
date_exp: "1974-10-14"
date_notif: "1975-10-03"
id: 1
note: "Nam id ipsam sequi."
tip: "Asigurare"
updated_at: "2019-03-15 10:54:40"
user_id: 1

но если я это сделаю console.log(this.state.insurance) возвращает объект с неопределенными свойствами

РЕДАКТИРОВАТЬ 2 Я думаю, что это близко к тому, что у меня есть https://codesandbox.io/s/n72rx0k660

1 Ответ

0 голосов
/ 15 марта 2019

Вопрос в том, как вы определили свое состояние.

У вас есть значение

state = {
 insurance: [
   {
    tip: "1"
   }
 ]
};

Измените его на:

state = {
insurance:
  {
    tip: "1"
  }
};

Для доступа к нему как this.state.insurance.tip оно должно бытьвведите страховой полис объект .То, что у вас есть сейчас, это this.state.insurance [0] .tip Поскольку страхование - это массив прямо сейчас.

lmk, если это требует дополнительного разъяснения.

...