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

React+TypeScript项目报错setToken is not a function该如何解决?

报错原因与修复方案

核心问题出在Login组件的props接收方式错误:React函数组件的第一个入参是所有传递属性组成的props对象,你当前直接将setToken作为组件第一个入参,相当于把整个props对象命名为setToken,自然不是函数类型,调用时就会触发类型错误。你的App.tsx传递props的写法没有问题,不需要修改。

修复方法

方法1:解构props接收(推荐)

直接从props对象中解构出setToken属性,同时正确标注类型,修改Login组件的入参部分即可:

// 先定义组件props类型,便于后续维护
type LoginProps = {
  setToken: React.Dispatch<React.SetStateAction<string | null>>
}
// 解构props拿到setToken
function Login({ setToken }: LoginProps) {
  // 组件内部原有逻辑全部保持不变即可
}

方法2:保留完整props对象调用

如果不想使用解构写法,也可以接收完整props对象,仅修改调用setToken的位置即可:

type LoginProps = {
  setToken: React.Dispatch<React.SetStateAction<string | null>>
}
function Login(props: LoginProps) {
  const [username, setUserName] = React.useState<string | null>(null);
  const [password, setPassword] = React.useState<string | null>(null);
  const handleSubmit = async (e: { preventDefault: () => void; }) => {
    e.preventDefault();
    const token = await loginUser({
      username,
      password
    });
    // 调用时加props前缀
    props.setToken(token);
  }
  // 原有渲染逻辑保持不变
}

修改完成后重新运行即可正常调用setToken完成登录状态更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:06:06