错误:无法在回调中调用 React Hook “useLogout”。阿波罗

Posted

技术标签:

【中文标题】错误:无法在回调中调用 React Hook “useLogout”。阿波罗【英文标题】:Error: React Hook "useLogout" cannot be called inside a callback. Apollo 【发布时间】:2020-07-07 06:50:46 【问题描述】:

我不确定这个错误是什么以及如何解决它?

代码:

import React,  useContext, useEffect  from 'react'
import  Layout, Loading, LangContext  from '@frontend'
import  gql, useMutation  from '@apollo/client'

const LogoutMutation = gql`
  mutation LogoutMutation 
    logout
  
`

const Logout = (): JSX.Element => 
  const [useLogout] = useMutation< logout: boolean >(LogoutMutation)

  useEffect(() => 
    useLogout().then(( data ) => 
      if (data?.logout === true) window.location.href = '/'
    )
  , [useLogout])

  return null


export default Logout

错误:

16:5 错误 React Hook "useLogout" 不能在内部调用 打回来。必须在 React 函数组件中调用 React Hooks 或 一个自定义的 React Hook 函数 react-hooks/rules-of-hooks

【问题讨论】:

【参考方案1】:

React aslo 识别函数名以 'use' 开头作为自定义钩子,所以我需要更改 useLogout =&gt; doLogout

【讨论】:

以上是关于错误:无法在回调中调用 React Hook “useLogout”。阿波罗的主要内容,如果未能解决你的问题,请参考以下文章

不能在回调中调用 React Hook “useState”

React+Typescript:修复 UseEffect Hook(回调+清理函数错误)

React set Hook 从组件外部的函数调用

在hook里面使用回调refs

在 react-hook-form 的 useFieldArray 上异步调用 reset 时,reset 无法正常工作

在 Next.js 中导入 react-hook-mousetrap 时出现“无法在模块外使用 import 语句”错误