我在useEffect中有一个代码(例如componentDidMount):
useEffect(()=>{
const idChat = props.match.params.id;
const data = {
idChat,
user: props.user._id
}
authService.getChat(data)
.then(res =>{
const userChat = res.data.users.filter(e=> e!== data.user).toString()
authService.getuser(userChat)
.then(res=>{
setOtherUser(res.data)
})
})
.catch(err=>{
setErrors(err.response)
})
}, [])
此代码运行一次。好吧。
我需要另一个使用otherUser
状态的useEffect。但这还没有设置。
useEffect(()=>{
socket.readUsers(users => {
const is = users.users.indexOf(otherUser._id);
console.log(users,otherUser._id, is)
if(is < 0){
setUsersStatus(false)
}else{
setUsersStatus(true)
}
});
})
如果我有条件,请不要进入if:/ 如何在useEffect中呼叫otherUser?
答案 0 :(得分:1)
将其添加为效果的依赖项。然后,您可以在未设置otherUser
时跳过执行代码。
useEffect(() => {
if (otherUser) {
socket.readUsers(users => {
const is = users.users.indexOf(otherUser._id);
console.log(users, otherUser._id, is);
if (is < 0) {
setUsersStatus(false);
} else {
setUsersStatus(true);
}
});
}
}, [otherUser]);
答案 1 :(得分:0)
添加otherUser用户作为此形状,并依赖于otherUser作为第二个参数,作为arry [otherUser]
useEffect(()=>{
if(otherUser){....}
},[otherUser])