Реагирует на историю маршрутизатора. нажатие возвращается к 404 маршруту

#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 и все хорошо.