2017-12-05 16 views
0

問題があります。私はcomponentDidMountの "modalData"という状態を常に "null"と呼びます。タスク変数のデータが必要です。componentDidMountの状態は常にnullです。タスク変数のデータがあるはずです

constructor(props){ 
    super(props); 
    this.tasksRef = firebase.database().ref('/users/'+ this.props.card_id); 
    this.state = { 
     modalData : null, 
    } 
} 

componentDidMount(tasksRef){ 
    var task = []; 
    tasksRef.on('value', (dataSnapshot) => { 
     task.push({ 
      about : dataSnapshot.val().about, 
      card : dataSnapshot.val().card, 
      company : dataSnapshot.val().company, 
      first_name : dataSnapshot.val().first_name, 
      job_title : dataSnapshot.val().job_title, 
      last_name : dataSnapshot.val().last_name, 
      photo : dataSnapshot.val().photo, 
      role : dataSnapshot.val().role, 
      thumbnail : dataSnapshot.val().thumbnail, 
      title : dataSnapshot.val().title, 
      website : dataSnapshot.val().website, 
      _key : dataSnapshot.key 
     }); 
     console.log('dataSnapshot.val().first_name : ' + dataSnapshot.val().first_name); 
    }); 
    console.log(task); //there is data 
    this.setState({ 
     modalData : task, 
    }); 
    console.log(this.state.modalData); //there is no data 
} 
+1

componentDidMountメソッドは、引数https://reactjs.org/docs/react-component.html#componentdidmount – Kunukn

+0

^thisを使用せず、代わりに 'this.taskRef'を使用します。 – Chris

+0

'componentDidMount'の中で' this.setState'を動かす –

答えて

3

SETSTATEは非同期ですので、あなたはにconsole.logすなわちを表示するためのコールバックを追加する必要があります、:。

this.setState({ modalData: task },() => console.log(this.state)); 

setState Docs

+0

もしそうなら、どのようにコンポーネントの状態を呼び出すことができますか?例: {this.state.modalData.first_name}

+0

状態を取得することは同期しているため、設定されていません。 – notgiorgi

-1

動作しません設定した後、それをログに記録。

this.state.modalData = task 

を使用してログに記録することができます。それはうまくいくでしょう。あなたのロギングのために。

+0

状態を直接変更しないでください。正しくありません。 – notgiorgi

関連する問題