2017-12-07 16 views
0

私はReacjsの新しいブランドですが、私は同様のタイトルでいくつかの質問に訪れましたが、助けられませんでした。Reactjsで "this.state is null"が表示されるのはなぜですか?

なぜこのコードは自分の状態を変更しないのですか?

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> 
      ... 

どうやって取得したデータとの私の状態を変更して、子コンポーネントに渡すことができますか?レンダリング

あなたがトラブルに得ることなくcomponentWillMountでSETSTATEを使用することができ、一般的に
+2

あなたが状態を定義しましたコンストラクタ?使用しない場合は 'constructor(){super(); this.state = {メッセージ: ''}} '。また、 'componentWillMount'の中でAPI呼び出しを行うのではなく、' componentDidMount'を使用します。 –

答えて

1

、しかし、あなたの場合は...

あなたが問題を引き起こしているリクエストの応答後の状態を設定しています。あなたの問題のため

三ソリューション:

1:状態を初期化するコンストラクタを使用します。

constructor(props){ 
    super(props); 

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

2:任意の約束

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

3を待たずにcomponentWillMountで火災SETSTATE:レンダリング機能チェックでは状態が正しく設定されている場合

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

ところで、私は新しい関数を追加する必要はないので(第1の解決策)、レンダリング関数(第3の解決策) – Tobias

関連する問題