为什么 React-Router-Dom 的 Router 中需要“历史”?

4 javascript history reactjs react-router-dom

通常,我们使用react-router-dom库来导航到每个页面。用法通常如下,与创建的内容相同create-react-app

history.js文件

import * as history from 'history';

export default history.createBrowserHistory();
Run Code Online (Sandbox Code Playgroud)

index.js文件

import {Router} from 'react-router-dom';

import history from '../history';

<Router history={history}></Router>
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么history需要Router. 有谁可以帮助我理解吗?

Aje*_*hah 5

Router是其他路由器(例如 BrowserRouter 和 HashRouter 等)的低级接口。因此,如果您使用Router,则必须提供history对象,因为它没有自己的对象。

但是,如果您不想提供自己的历史对象,则可以使用BrowserRouter. 它有自己的history对象。

请参阅BrowserRouterRouter

来自文档:

路由器:所有路由器组件的公共低级接口。通常,应用程序将使用高级路由器之一: <BrowserRouter><HashRouter><MemoryRouter><NativeRouter><StaticRouter>

以下是导入这些内容的方法:

import { Router } from "react-router-dom"
import { BrowserRouter } from "react-router-dom"
Run Code Online (Sandbox Code Playgroud)

我们还可以使用别名来导入 BrowserRouter:

import { BrowserRouter as Router } from "react-router-dom"
// Now Router is still a BrowserRouter
// Probably this causes the confusion
Run Code Online (Sandbox Code Playgroud)

使用低级别的一个常见原因或好处是,通过这种方式,您可以Router在任何 JS 文件中导入和使用(不仅仅是在 React 组件中)。historyhistory