如何解决我怎样才能正确调用这个自定义钩子,并避免无限重新渲染?
我正在使用 Apollo Client 并希望进行可重复使用的调用,因此我被推荐使用自定义挂钩。我已经尝试过,但我认为我没有正确实施它们,因为它们无限期地重新渲染,我不知道这是否真的能达到我想要的效果。
我想从另一个组件调用 useHandleFollow 来调用 useFollowUser
或 useUnfollowUser
,这将根据 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 举报,一经查实,本站将立刻删除。