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