Почему я получаю "this2" не определено? - PullRequest
0 голосов
/ 18 июня 2019

Я предполагаю, что это как-то связано с привязкой this и тем фактом, что я пытаюсь перебрать объект. В этом коде я вижу, что ответы верны, я просто получаю сообщение об ошибке для строки this.setState: _this2.setState is not a function.

componentDidMount() {
    console.log('MatchesScreen: ', Object.keys(this.props))
    Object.keys(this.props.profile.profile.matches).map(function(username, keyIndex) {
      console.log('match', username)
      url = 'https://xxxxx.execute-api.us-west-2.amazonaws.com/prod/profile?username=' + username
      fetch(url, {
        method: 'GET',
      })
      .then((response) => response.json())
      .then((responseJson) => {
        this.setState({isLoading: false})
        this.props.updateMatches({matches: responseJson})
      })
      .catch((error) =>{
        console.error(error);
      })
    })
  }

Для сравнения, этот код работает совершенно нормально, я полагаю, потому что циклы не выполняются?

componentDidMount() {

    Auth.currentAuthenticatedUser({
        bypassCache: false
    }).then(user => {
      username = 'username=' + user.username
      this.setState({username: user.username})
      url = 'https://xxxxxxx.execute-api.us-west-2.amazonaws.com/prod/profile?' + username
      fetch(url, {
        method: 'GET',
      })
      .then((response) => response.json())
      .then((responseJson) => {
        this.setState({
          isLoading: false,
          dataSource: responseJson,
          age: responseJson.basic_info.age.toString(),
          height: responseJson.basic_info.height,
          promptQuestion: responseJson.prompt_question,
        })
      })
      .catch((error) =>{
        console.error(error);
      });
    })
    .catch(err => console.log('EditProfileScreen: error getting user: ', err))
  }

1 Ответ

0 голосов
/ 18 июня 2019

В функции, определенной оператором function, this не будет ссылаться на верхнюю область функции, потому что в JavaScript каждая функция создает свою собственную область, когда она определена. Если вы используете функцию, определенную с помощью функции-стрелки, она сохранит область действия.

Вы можете узнать больше о функциональных областях здесь .

И здесь вы можете узнать больше о функции обозначения стрелки.

...