#reactjs #react-router #browser-history #html5-history #history.js
#reactjs #реагирует-маршрутизатор #браузер-история #html5-история #history.js
Вопрос:
Каждый раз, когда я выполняю history.push("/path")
URL-адрес, изменяется на правильный путь, но компонент 404 PageNotFound визуализируется.
// indes.tsx
import React from 'react';
import ReactDOM from 'react-dom';
import {App} from './App';
import history from "./customHistory";
import {Router} from "react-router";
ReactDOM.render(
<React.StrictMode>
<Router history={history}>
<App/>
</Router>
</React.StrictMode>,
document.getElementById('root')
);
/// App.tsx
import React, {Component} from "react"
import {Route, Switch} from "react-router-dom";
import {FrontPage} from './components/FrontPage'
import {LoginPage} from "./components/LoginPage";
import {PageNotFound} from "./components/PageNotFound";
import {RequestPasswordResetPage} from "./components/RequestPasswordResetPage";
export class App extends Component {
render() {
return (
<Switch>
<Route path={"/"} component={FrontPage} exact={true}/>
<Route path={"/login"} component={LoginPage} exact={true}/>
<Route path={"/request_password_reset"} component={RequestPasswordResetPage}
exact={true}/>
<Route path={""} component={PageNotFound}/>
</Switch>
)
}
}
Мой объект истории выглядит следующим образом
// customHistory.ts
import { createBrowserHistory } from "history";
export default createBrowserHistory({});
И я вызываю history.push после того, как пользователь запросил сброс пароля:
// RequestPasswordResetPage.tsx
private handleSubmit(event: FormEvent<HTMLFormElement>) {
event.preventDefault();
AccountService.requestPasswordReset(this.state.email)
.then((ans: Response) => {
if (ans.ok) {
console.log("REDIRECT TO HOME");
history.push("/login");
} else {
throw Error(ans.statusText);
}
});
}
Каждый раз, когда URL-адрес изменяется localhost:3000/login
, но PageNotFound
компонент отображается.
Комментарии:
1. можете ли вы попробовать обновить PageNotFound path до «*» <звезда> вместо «» <пустая строка>
2. Я уже пробовал это. Появляется то же поведение, и
PageNotFound
компонент по-прежнему отображается, даже если URL-/login
адрес.
Ответ №1:
Для выполнения этой работы используйте react-router версии 5.2.0 и history версии 4.9.0.
https://codesandbox.io/s/quizzical-dan-z3725
или
Попробуйте использовать browserHistory https://reactrouter.com/web/example/basic
кажется, есть какая-то проблема с customHistory, когда мы используем другую версию
Комментарии:
1. Понижение версии до версии 4.9.0 исправляло это, до этого я использовал версию 5.0. Спасибо 🙂
2. Боже мой, спасибо. Это сводило меня с ума. Теперь я использую history@4.10.1 с react-router@5.2.0 и все хорошо.