可能未处理的承诺拒绝(id:0):undefined不是对象(' prevComponentInstance._currentElement')

时间:2017-10-19 08:33:49

标签: javascript json reactjs react-native react-native-android

在本地反应中我试图使用axios.get(my_url_path)获取json数据,然后我将response.data更新为我的状态到' urldatabase'键,如果我试图调用此状态键并从json中读取数据,我得到错误:

Possible Unhandled Promise Rejection (id: 0): undefined is not an object ('prevComponentInstance._currentElement').... 

我的代码如下:

  }
  constructor(props) {
    super(props);
    this.state = { userAnswer: '', count: 0, urldatabase: {} };
  }



  componentWillMount(){
    axios.get('my_url_path')
      .then(response => this.setState({urldatabase: response.data}));
  }
  render() {
    let num = this.state.count;
    console.log(this.state.urldatabase[num].book)
    const book = this.state.urldatabase[num].book
     return(
        <RiddleHeader headerText={book} />
)
}
}

任何人都可以解释为什么我收到此错误?我做错了什么?

2 个答案:

答案 0 :(得分:1)

考虑:在componentWillMount中,如果axios承诺被拒绝会怎样?对:它未经处理。你需要一个catch处理程序。承诺的基本规则:始终处理拒绝或将承诺返回给调用者。在这种情况下,如果您从componentWillMount返回承诺,则React不会对其执行任何操作,您需要在componentWillMount内处理错误。

答案 1 :(得分:0)

重新尝试这样的代码并检查它是否再次发生。

  }   constructor(props) {
    super(props);
    this.state = { userAnswer: '', count: 0, urldatabase: {} };   }



  componentWillMount(){
    axios.get('my_url_path')
      .then(response => this.setState({urldatabase: response.data}));   }   render() {
    let num = this.state.count;
    console.log(this.state.urldatabase[num].book)
    const book = this.state.urldatabase[num] && this.state.urldatabase[num].book; // this code can avoid undefined error
     return(
        <RiddleHeader headerText={book} /> ) } }