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

使用react-router-dom的useHistory跳转时报unexpected use of history错误如何解决

问题原因

你虽然在顶部引入了react-router-dom的useHistory Hook,但没有在Login组件内部调用该Hook获取history实例,代码中直接使用的history变量没有被定义,因此触发该错误。

修复步骤
  1. 在Login组件内部的顶层位置(state声明之后、自定义函数声明之前)调用useHistory获取实例,新增代码如下:
const history = useHistory()

修正后的组件开头部分示例:

function Login() {
    const [username, setUsername] = useState("")
    const [password, setPassword] = useState("")
    const [data, setData] = useState(null)
    // 新增以下代码调用useHistory
    const history = useHistory()

    // 后续原有代码不变
    // ...
}
  1. (可选优化)你当前的代码存在逻辑时序问题:表单绑定了onSubmit提交事件会发送登录请求,同时登录按钮单独绑定了loginUser事件会直接请求用户信息,可能出现登录请求还没完成、用户信息校验就已经执行的情况,建议将两段逻辑合并,把跳转逻辑放到登录请求成功的回调中:
const onSubmit = (e) => {
  e.preventDefault()
  const users = {
    username: username,
    password: password
  }
  axios.post('http://localhost:4000/users/login', users, {
    withCredentials: true
  })
  .then(res => {
    if(res.status === 200) {
      // 登录成功直接跳转,无需额外再请求用户信息校验
      history.push("/home")
    }
  })
}

调整后可以删除按钮上的onClick={loginUser}绑定,避免重复触发请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 10:27:00