Javascript useState未立即更新状态
这里,userlist正在立即更新上述逻辑的正确代码 我试图从firestore中获取userlist,而不是遍历该列表以从不同集合中查找用户详细信息Javascript useState未立即更新状态,javascript,reactjs,google-cloud-firestore,use-effect,use-state,Javascript,Reactjs,Google Cloud Firestore,Use Effect,Use State,这里,userlist正在立即更新上述逻辑的正确代码 我试图从firestore中获取userlist,而不是遍历该列表以从不同集合中查找用户详细信息 useEffect(() => { db.collection("following/" + Credens.uid + "/userFollowing") .get() .then((snapshot) => { followingList =
useEffect(() => {
db.collection("following/" + Credens.uid + "/userFollowing")
.get()
.then((snapshot) => {
followingList = snapshot.docs.map((value, ind) => value.data());
})
.then(() => {
if (followingList.length > 0) {
followingList.map((value, index) => {
db.collection("Postss")
.doc(value.useruid)
.collection("MovieWatched")
.get()
.then((snaps) => {
// let Detail = snap.data()
let movieidList = snaps.docs.map(
(value) => value.data().postMovieId
);
if (movieidList.includes(MovieId) === true) {
setuserList((prev) => [...prev, value.useruid]);
}
});
});
}
})
.then(() => {
console.log(userList);
userList.map((value, index) => {
db.collection("users")
.doc(value)
.get()
.then((snapshot) => {
setfriendsWatchedData((prev) => [
...prev,
{
usersID: value,
userData: snapshot.data(),
},
]);
});
});
});
// return () => {
// cleanup
// }
}, []);
为了确保状态确实发生了更改,可以使用useffect()监视该状态的更改,如:
useEffect(() => {
if (userList) {
// userList.map....
}
}, [userList])
可以在if语句中指定其他条件。钩子将在状态更改时运行。它会导致useeffect无限运行,因为userlist一旦更新,它将一次又一次地运行useeffect,并且userlist会通过重复项不断增加。是的,您永远不应该更改use effect i侦听的值。我的印象是,当它改变时,你只想倾听,而不改变状态本身(错过了映射部分)。但是您可以通过在映射之后设置一个额外的bool参数,并将[userList]更改为[userList&&boolValue]来停止无限循环。