为什么我收到未定义的“ this2”?

时间:2019-06-17 22:07:05

标签: javascript function react-native scope this

我认为这与在某处绑定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 :(得分:0)

function语句定义的函数中,this不会引用上层函数范围,因为在JavaScript中,每个函数在定义时都会创建自己的范围。如果您使用带有箭头功能符号定义的功能,它将保留范围。

您可以阅读有关函数作用域here的更多信息。

还有here,您可以阅读有关箭头功能符号的更多信息。