我怎样才能正确调用这个自定义钩子,并避免无限重新渲染?

问题描述

我正在使用 Apollo Client 并希望进行可重复使用的调用,因此我被推荐使用自定义挂钩。我已经尝试过,但我认为我没有正确实施它们,因为它们无限期地重新渲染,我不知道这是否真的能达到我想要的效果

我想从另一个组件调用 useHandleFollow 来调用 useFollowUseruseUnfollowUser,这将根据 isFollowingUser 条件执行两个 useMutations 之一。

export function useHandleFollow(props) {
  const { user,isFollowingUser } = props
  const [useFollowUser,{ followedData,followError }] = useMutation(FOLLOW_USER);
  const [useUnfollowUser,{ unfollowedData,unfollowedError }] = useMutation(UNFOLLOW_USER);
  const [followSuccess,setFollowSuccess] = useState(false)
  if(!isFollowingUser){
    useFollowUser({ variables: { fromId: auth().currentUser.uid,toId: user.id},onCompleted: setFollowSuccess(true)})
  }else{
    useUnfollowUser({ variables: { fromId: auth().currentUser.uid,onCompleted: setFollowSuccess(true)})
  }
  return followSuccess
}

然后我尝试从另一个组件的主体中像这样实例化它:

const followed = useHandleFollow({ user: author,isFollowingAuthor })

但这会触发无限循环。真的,我只想在用户点击时调用它,所以有一个这样的功能

const handleUserFollow = (user) => {
  useHandleFollow(user,true)
}

我应该怎么做呢?提前致谢!

编辑:建议的类似问题是一个不同的问题,这个问题是一个单独的问题。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)