Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 函数更新后如何获取更新状态值_Reactjs_React Native_Setstate - Fatal编程技术网

Reactjs 函数更新后如何获取更新状态值

Reactjs 函数更新后如何获取更新状态值,reactjs,react-native,setstate,Reactjs,React Native,Setstate,我正在尝试获取登录用户的详细信息。我需要将数据置于状态,并使用相同的状态进行进一步处理。将数据置于状态并使用此数据需要时间。几乎需要2-3秒才能使用该数据的状态 我解决了这个问题,如果我们使用setTimeOut()函数3秒,这样我们就可以在这段时间内更新数据。如果我们不使用setTimeOut()并在更新后使用state wright,那么它将提供状态的初始数据 complete_date = date + ":" + month + ":" + year; var query = fire

我正在尝试获取登录用户的详细信息。我需要将数据置于状态,并使用相同的状态进行进一步处理。将数据置于状态并使用此数据需要时间。几乎需要2-3秒才能使用该数据的状态

我解决了这个问题,如果我们使用
setTimeOut()
函数3秒,这样我们就可以在这段时间内更新数据。如果我们不使用
setTimeOut()
并在更新后使用state wright,那么它将提供状态的初始数据

complete_date = date + ":" + month + ":" + year;

var query = firebase.database().ref('attendence/'+ complete_date +"/").orderByKey();

email_match=false;
entry_time =null,
l_id = null,

query.on("value",(data)=> 
{
  data.forEach(function(childs) 
  {
    l_id = childs.key;
      // __ to check if the user already loged in before.
    var att_query = firebase.database().ref('attendence/'+ complete_date +"/"+ l_id).orderByKey();
    att_query.once("value",(data)=> 
    {
      if(email == data.child('email').val())
      {
        email_match =  true;
        entry_time = data.child('timeEntry').val();
      }
    }); //  
  });  // 

  this.setState({ last_id:l_id });
  this.setState({ emailMatchState:email_match });
  this.setState({alreayLogedState : entry_time});

}); // _____end of query.on("value",(data)=> 

setTimeout(() => 
{
console.log("-----------------------------------");
console.log("already logged :",this.state.alreayLogedState," email match :",this.state.emailMatchState , " result  : ", this.state.result , " last_id :",st.last_id);
console.log("-----------------------------------");
},3000);

我需要在更新后使用state,而不使用
setTimeout()
,以加快应用程序的运行。

setState的第二个参数是在所有更新完成后执行的
回调

 this.setState({ last_id:l_id }, () => console.log(this.state.last_id))

setState接受可选的第二个参数,该参数在对状态对象进行更新后调用

例如:

let callback = () => {
 // do something
}

this.setState({
 keyToUpdate: valueToUpdate
}, callback)
有关使用此回调的其他阅读资料:

此外,除非在两个单独的调用之间发生了什么,否则:

this.setState({ last_id:l_id });
this.setState({ emailMatchState:email_match });
this.setState({alreayLogedState : entry_time});
可以简化为:

this.setState({ 
 last_id:l_id,
 emailMatchState: email_match, 
 alreayLogedState: entry_time
}); //optionally add callback