History.push 适用于 BrowserRouter 但不适用于 Router
History.push works on BrowserRouter but not Router
所以我试图在我的组件中使用 history.push('/path')。我的设置如下所示:
App.js
import { Router, Switch, Route } from 'react-router-dom';
// History
import { createBrowserHistory } from 'history';
const history = createBrowserHistory();
function App() {
return (
<Router history={history}>
<Switch>
<Route path='/' exact render={(props) => <Homepage />} />
<Route path='/search' render={(props) => <SecondComponent />} />
</Switch>
</Router>
);
}
export default App;
SecondComponent.js
import React from 'react';
import { withRouter } from "react-router-dom";
const SecondComponent = ({ history }) => {
const myFunction = () => {
history.push('/search');
};
return (
<button onClick={() => myFunction}>stuff</button>
);
}
export default withRouter(SecondComponent);
问题是,当我单击按钮时,URL 会发生变化,但组件不会呈现。问题是,如果我将 app.js 中的 Router
替换为 BrowserRouter
,它工作正常,但我收到警告:<BrowserRouter>
忽略 history 道具。要使用自定义历史记录,请使用 import { Router }
而不是 import { BrowserRouter as Router }
。
react-router 5x 与 history 4x 兼容。检查历史版本,如果高于 4x,请尝试降级到 4x 版本,它应该可以正常使用 Router
所以我试图在我的组件中使用 history.push('/path')。我的设置如下所示:
App.js
import { Router, Switch, Route } from 'react-router-dom';
// History
import { createBrowserHistory } from 'history';
const history = createBrowserHistory();
function App() {
return (
<Router history={history}>
<Switch>
<Route path='/' exact render={(props) => <Homepage />} />
<Route path='/search' render={(props) => <SecondComponent />} />
</Switch>
</Router>
);
}
export default App;
SecondComponent.js
import React from 'react';
import { withRouter } from "react-router-dom";
const SecondComponent = ({ history }) => {
const myFunction = () => {
history.push('/search');
};
return (
<button onClick={() => myFunction}>stuff</button>
);
}
export default withRouter(SecondComponent);
问题是,当我单击按钮时,URL 会发生变化,但组件不会呈现。问题是,如果我将 app.js 中的 Router
替换为 BrowserRouter
,它工作正常,但我收到警告:<BrowserRouter>
忽略 history 道具。要使用自定义历史记录,请使用 import { Router }
而不是 import { BrowserRouter as Router }
。
react-router 5x 与 history 4x 兼容。检查历史版本,如果高于 4x,请尝试降级到 4x 版本,它应该可以正常使用 Router