You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

React中useHistory钩子调用无效及Invalid hook call错误排查求助

解决React中useHistory钩子无效及Invalid hook call错误

看起来你遇到的问题主要来自两个方面:history版本与react-router-dom不兼容,以及路由组件的使用方式不符合react-router-dom v5的规范。下面是具体的排查和修复步骤:

一、版本冲突问题

你当前安装的history是v5.0.0,但react-router-dom v5.2.0依赖的是history v4.x版本,版本不匹配会导致React钩子调用异常,甚至触发"多个React副本"的错误场景。

修复步骤:

  1. 卸载当前不兼容的history包:
npm uninstall history
  1. 安装与react-router-dom v5兼容的history版本:
npm install history@4.10.1

二、路由组件配置错误

在react-router-dom v5中,你不需要手动创建BrowserHistory实例并传递给Router,官方提供的BrowserRouter已经内置了这部分逻辑,手动传递自定义history反而会破坏路由上下文,导致useHistory无法正确获取路由实例。

修改Route.js文件:

import React from 'react';
// 替换Router为内置的BrowserRouter
import { BrowserRouter, Route, Switch, Redirect } from 'react-router-dom';
import Login from '../Pages/Login';
import Profile from '../Pages/Profile';

const Routes = () => {
  // 移除手动创建的history实例
  return (
    <BrowserRouter>
      <Switch>
        <Route path="/login" component={Login} />
        <Route path="/profile" component={Profile} />
        {/* 添加默认路由重定向,避免空白页面 */}
        <Route path="/" exact render={() => <Redirect to="/login" />} />
      </Switch>
    </BrowserRouter>
  );
}
export default Routes;

三、Login组件的小细节修复

你的Login组件里密码输入框的属性写错了,typ应该改为type,否则输入框功能会异常:

<input type="text" placeholder="password" />

验证修复

完成以上步骤后,重启你的开发服务器,点击Login页面的Submit按钮,应该就能正常跳转到Profile页面了。


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

火山引擎 最新活动