You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React提示Invalid hook call,Hook在函数体内调用仍报错如何解决?

问题原因

你遇到的报错属于官方给出的第二种情况:违反了Hooks调用规则。

React Hooks 只能在两个场景下调用:

  • React 函数组件的顶层作用域
  • 自定义 Hook 的顶层作用域

你代码中的 useTranslation 调用位置是 Redux Thunk 的异步回调函数内部,该函数属于普通的业务逻辑函数,不在 React 组件的渲染生命周期执行上下文内,完全不满足 Hook 的调用条件,因此触发报错。

解决方案

方案一:从调用侧传入翻译函数

你调用createMail这个Thunk的位置必然处于React函数组件或者自定义Hook中,可在调用侧先调用useTranslation获取t函数,再作为参数传入Thunk:

// 调用thunk的组件/自定义Hook内部代码
const { t } = useTranslation(["emails", "translation"]);
// 触发thunk时传入t
dispatch(createMail(formValues, t));

对应修改Thunk的定义:

export const createMail =
  (values: ValuesType, t: TFunction): AppThunk =>
  async (dispatch, getState) => {
    const state = getState();
    // 直接使用传入的t函数完成翻译
    const successTip = t('emails:create_success');
  };

方案二:直接调用i18n原生API

不需要使用Hook版本的翻译能力,直接引入i18n实例调用其t方法即可,无需依赖React的执行上下文:

// 引入你项目中初始化完成的i18n实例
import i18n from '@/config/i18n';

export const createMail =
  (values: ValuesType): AppThunk =>
  async (dispatch, getState) => {
    const state = getState();
    const t = i18n.t;
    // 后续正常使用t即可
  };

内容的提问来源于stack exchange,提问作者sicario777

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:30:00