开发者问题收集

未捕获的类型错误:在 useEffect 中使用 map 函数时无法读取未定义的属性(读取“map”)

2022-12-13
56
useEffect(() => {
        if(currentUser){
            currentUser?.friends.map(friends => {
                if(friends._id===currentProfile._id){
                    return setFriend(true)
                }
            })
        }else{
            return setFriend(false)
        }
    },[currentUser,currentProfile])

//currentUser is the user logged in
//currentProfile is user selected

如果选定的用户已经是好友,我想将按钮显示为“取消好友”。我正在尝试使用地图功能来查找用户是否已经是好友。但地图功能显示为错误

2个回答

在我看来, currentUser 已定义,但没有属性 currrentUser.friends 。 尝试 currentUser?.friends?.map(...)

并将 else 子句更改为始终返回。如果调用了 return setFriend(true) ,则不会调用 return friend(false) ,但在所有其他情况下都是如此。

patrickhrastnik
2022-12-13

由于您有 if 语句,我们已经知道 currentUser 存在,因此您必须查看 currentUser 是否有朋友。 但是,应该使用 map 来创建新数组,您可以使用它来迭代朋友。您可以改用 some 来简化整个 useEffect

useEffect(() => {
  setFriend(
    currentUser &&
      currentUser.friends?.some((friends) => friends._id === currentProfile._id)
  );
}, [currentUser, currentProfile]);

如果 currentUser 是一个值,并且朋友的 id 与 currentProfile 相同

Disco
2022-12-13