Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.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
Javascript log(myState)显示完整数组,但Console.log(myState.length)给出0_Javascript_Reactjs - Fatal编程技术网

Javascript log(myState)显示完整数组,但Console.log(myState.length)给出0

Javascript log(myState)显示完整数组,但Console.log(myState.length)给出0,javascript,reactjs,Javascript,Reactjs,我是一个参与考勤系统项目的初学者。(对所有错误代码表示抱歉) 所以我有一个名为ShowData的组件,它从父组件接收一些道具。我在这里使用条件渲染。因此,我只有一个名为filteredUsers的状态变量,它被初始化为空数组 现在我要做的是从firebase获取所有用户数据,一旦我拥有了所有用户,我就将我的状态设置为该状态。因此,我有一个useffect() 它有一个名为init()的异步函数 现在的问题是,当我尝试在条件渲染部分使用filteredUsers.length时,它给出了0 从“

我是一个参与考勤系统项目的初学者。(对所有错误代码表示抱歉)

所以我有一个名为ShowData的组件,它从父组件接收一些道具。我在这里使用条件渲染。因此,我只有一个名为filteredUsers的状态变量,它被初始化为空数组

现在我要做的是从firebase获取所有用户数据,一旦我拥有了所有用户,我就将我的状态设置为该状态。因此,我有一个useffect() 它有一个名为init()的异步函数

现在的问题是,当我尝试在条件渲染部分使用filteredUsers.length时,它给出了0

从“React”导入React;
从“/firebase”导入{db};
从“/utils”导入{dateStripper,getDaysArray};
导入“/ShowData.css”;
从“/MusterUser”导入MusterUser;
功能ShowData(道具){
让{userid,date,format,employee}=props;
让[filteredUsers,setFilteredUsers]=React.useState([]);
控制台日志(日期);
React.useffect(()=>{
console.log(“Useffect触发”);
异步函数getUserData(employeeID,currentDate){
让attendanceDoc=等待db
.collection(userid)
.doc(“Att记录”)
.收款(当前日期)
.doc(雇员ID)
.get()
。然后((doc)=>{
如果(!doc.存在){
返回{data:null,currentDate:currentDate};
}
返回{data:doc.data(),currentDate:currentDate};
});
返回出席人数;
}
异步函数getEmployees(){
返回等待数据库
.collection(userid)
.doc(“员工记录”)
.收集(“UUID数据”)
.get()
。然后((员工快照)=>{
设temp=[];
employeeSnapshot.forEach((employeeDoc)=>{
温度推送(employeeDoc);
});
返回温度;
});
}
异步函数init(){
让allDates=[];
设musterUsers=[];
设dates=getDaysArray(日期[0],日期[1]);
如果(日期[0]==日期[1]){
dates.pop();
}
日期。forEach((日期)=>{
allDates.push(dateStripper(date));
});
如果(格式==“集合”&员工==“全部”){
设serialNum=0;
让用户=等待getEmployees();
users.forEach(异步(用户)=>{
serialNum=serialNum+1;
让tempUser={
SNo:serialNum,
名称:user.data()[“员工姓名”],
部门:user.data()[“员工部门”],
desg:user.data()[“员工指定”],
总数:0,
出席人数:0,
缺席人数:0,
小姐:0,
};
让调用=[];
allDates.forEach(异步(日期)=>{
push(getUserData(user.id,date));
});
let userPerDates=wait Promise.all(调用);
userPerDates.forEach((回调结果)=>{
let data=callbackResult.data;
让currentDate=callbackResult.currentDate;
如果(数据){
tempUser[“总计”]=tempUser[“总计”]+1;
如果(数据[“状态”]=“A”){
tempUser[currentDate]=“缺席”;
tempUser[“缺席”]=tempUser[“缺席”]+1;
}否则如果(数据[“状态”]=“P”){
临时用户[currentDate]=“当前”;
tempUser[“present”]=tempUser[“present”]+1;
}否则如果(数据[“状态”]=“MIS”){
临时用户[currentDate]=“MIS”;
tempUser[“miss”]=tempUser[“miss”]+1;
}
}否则{
tempUser[currentDate]=“不适用”;
}
});
musterUsers.push(tempUser);
});
返回Musteruser;
}
}
如果(日期长度){
console.log(“初始化触发”);
init()。然后((musterUsers)=>{
setFilteredUsers(musterUsers);
});
}否则{
控制台日志(“未触发”);
}
},[日期、格式、员工];
如果(!date.length){
console.log(“NoDate”);
返回(
没什么可展示的
);
}否则{
控制台日志(过滤器读写器);
console.log(格式);
让allDates=[];
设dates=getDaysArray(日期[0],日期[1]);
如果(日期[0]==日期[1]){
dates.pop();
}
日期。forEach((日期)=>{
allDates.push(dateStripper(date));
});
log(“我到达这里”);
console.log(filteredUsers.length);
如果(格式==“集合”&&filteredUsers.length>0){
日志(“主功能运行”);
返回(
集合卷
从{allDates[0]}到{allDates[allDates.length-1]}
  • 员工姓名
  • 员工部
  • 员工指定
  • {allDates.map((allDates)=>(
  • {allDates}
  • ))}
  • 总数
  • 出席
  • 缺席
  • 错过
  • ); }否则{ 返回OOPS; } } } 导出默认显示数据请参阅

    。。。
    返回
    (
    {!日期。长度?
    没什么可展示的
    :
    ....
    }
    )
    
    不要将元素一个接一个地推送到数组中,只需使用一个临时数组,并对其进行任意次数的更新,然后最终使您的状态与该数组相等。

    阅读此文,我以前尝试过此方法,但我遇到的问题是,每当我执行console.log(myState.length)时,它都会给我0,这真的很奇怪。你不能马上得到我的状态
    const [myState, setMyState] = React.useState([]);
    
    ...
    
    newArray = ["Hello", "World", "Know"]
    setMyState(newArray)
    
    ...
    
    React.useEffect(() => {
      console.log(myState)
    }, [ myState ])
    
      ...
      return 
        (<div>
           {!date.length ? 
              <div className="noData">
                <h1>Nothing to show</h1>
              </div> :
              <div>
               ....
              </div>
           }
        </div>)