Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.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 useState未立即更新状态_Javascript_Reactjs_Google Cloud Firestore_Use Effect_Use State - Fatal编程技术网

Javascript useState未立即更新状态

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 =

这里,userlist正在立即更新上述逻辑的正确代码 我试图从firestore中获取userlist,而不是遍历该列表以从不同集合中查找用户详细信息

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]来停止无限循环。