为什么我得到" this.state为null"在Reactjs?

时间:2017-12-07 10:17:41

标签: reactjs ecmascript-6

我是Reacjs的新手,我访问了几个类似标题的问题,但没有人帮助过我。

为什么这段代码不会改变我的状态?

 componentWillMount()
 {
     /** I am using superagent to fetch some data but it doesn't matter */

     var url = "http://www.omdbapi.com/?s=star&apikey=mykey";
     Request.get(url).then((response) => {

     this.setState({ messages: response.body.Search});


    });
  }

我的渲染方法

    render() {

         return (

                 <div>     
  <ListaMensagens  messages={this.state.messages}  /> this.state is null here.
                </div>
            ...

如何使用检索到的数据更改状态并将其传递给子组件?

1 个答案:

答案 0 :(得分:1)

一般情况下,你可以在componentWillMount中使用setState而不会遇到麻烦,但是......

在您的情况下,您在请求响应之后设置状态,这会导致问题。

针对您的问题的三种解决方案:

1:使用构造函数初始化状态。

constructor(props){
    super(props);

    this.state = {
        messages: []
    };
}

2:在componentWillMount中触发setState而不等待任何Promise

componentWillMount() {
    this.setState({
        messages: []
    });
    request(...);
}

3:在渲染功能中检查状态是否设置正确

render(){
    <div>
        { this.state && this.state.messages && <ListMensagens ... /> }
    </div>
}