history.push обновляет только URL при использовании BrowserRouter в приложении реагирования - PullRequest
0 голосов
/ 02 мая 2019

Я знаю, что этот вопрос уже обсуждался. Но почему-то я не могу заставить его работать в моем приложении.

Обычно навигация между компонентами работает нормально. Однако history.push только изменяет URL-адрес, но не обновляет содержимое. Например, на странице входа в систему я хочу перейти пользователя на домашнюю страницу, если он уже вошел в систему. Но код обновляет только URL. Есть идеи?

const Login = () => {

    useEffect(() => {
        if (authenticationService.currentUserValue != null) {
            history.push('/home');
        }
    }, [])

    //other code
}

В index.js у меня есть следующее

<BrowserRouter basename={baseUrl} history={history}>
    <Provider store={store}>
        <App />
    </Provider>
</BrowserRouter >,

В app.js у меня есть:

<Layout>
    <Switch>
        <PrivateRoute exact path="/home" component={withRouter(Home)} />
        <Route exact path='/home' component={withRouter(Home)} />
        <Route exact path='/login' component={Login} />
        <Route exact path='/register' component={withRouter(Register)} />
    </Switch>
</Layout>

1 Ответ

1 голос
/ 02 мая 2019

Проблема в вашем случае заключается в том, что вы используете пользовательскую историю с BrowserRouter, что не правильно. BrowserRouter использует свою собственную историю, и вы должны использовать ее для изменения страниц

const Login = ({history}) => {

    useEffect(() => {
        if (authenticationService.currentUserValue != null) {
            history.push('/home');
        }
    }, [])

    //other code
}

Если вы по какой-то причине использовали пользовательскую историю, вам нужно использовать Router с пользовательской историей

<Router basename={baseUrl} history={history}>
    <Provider store={store}>
        <App />
    </Provider>
</Router >
...