可以使用效果等待setState(hook)吗?

时间:2019-09-24 08:33:27

标签: reactjs

我在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?

2 个答案:

答案 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])