如何正确使用 react-router-dom 中的 useHistory()?

IT技术 javascript reactjs react-router-dom
2021-05-17 13:15:28

如何useHistory()正确使用我无法从一个react组件过渡到另一个。根据 React 文档和 Stack Overflow 上的说明,我无法从 App.js 过渡到 MyComponent.js。

例如 - 我正在尝试

/* **App.js ** */
/* Import modules */
import React from 'react';
import { useHistory } from 'react-router-dom'; // version 5.2.0

function App()
{
    let history = useHistory ();
    const handleClick = () => {
       history.push ('./pages/MyComponent');
    }    

    return (
       <div className="App">
          <button onClick={handleClick}>Next page ==></button>
       </div>
    );
}

我也测试了这个例子,但是当按下按钮时输出会抛出以下错误:

类型错误:无法读取未定义的属性“推送”

是不是有什么东西泄露给我了,还是 Babel 这边有错误?

项目react结构:

+ Root/
    + src/
        - App.js
        - index.js
        + pages/
            - MyComponent.js
    
4个回答

您不能只使用useHistory钩子重定向到另一个页面。您需要正确设置您的应用程序才能使用 React Router。从这个https://reactrouter.com/web/example/basic开始看他们的例子

您需要用<BrowserRouter />来包装整个应用程序,这将通过钩子提供您正在寻找的历史对象。

顺便说一句,您没有提供 history.push 的相对文件路径作为参数,您必须提供通常使用<Route />组件设置的有效路径

这在 v6 中发生了变化,useHistory 现在是 useNavigate,我们可以按如下方式使用它:

代替:

const history = useHistory()
history.push('/')

我们现在使用:

const navigate = useNavigate()
navigate('/')

使用history.replace('/<route-name>')也有效。

您需要将它与 react-router-dom 一起使用。设置您的路由器配置,然后将其推送到该路径。您可以通过查看文档获得更多信息。

https://reactrouter.com/web/example/route-config

不要忘记设置您的开关组件和您的根路径。