0

I have a problem, every i call state "modalData" in componentDidMount, state always null, there should be data from the task variable.

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
}

2 Answers2

3

setState is asynchronous, so you'll need to add a callback to display the console.log i.e.,:

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

setState Docs

notgiorgi
  • 1,691
  • 12
  • 27
rrd
  • 5,789
  • 3
  • 28
  • 36
-1

Logging it after setting won't work. You can use

 this.state.modalData = task 

, then logging it . That would work. for your logging.

xSkrappy
  • 747
  • 5
  • 17