Window.location работает противоречиво в ComponentDidMount () - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь перенаправить пользователя в собственное приложение, установив window.location в пользовательский URI, поэтому, если у пользователя установлено приложение, он откроет эту страницу в приложении.

Компонент входа:

componentDidMount() {
        const { match: { params: { domain } } } = this.props
        if (domain) this.setState({ domain })
        if (typeof window !== 'undefined') {
            window.location = `clickclock://login/potato`
       }

    }

рендеринг через маршрутизатор реакции:

<Route path="/login/:domain?" render={props => status ? redirect("/") : <LoginPanel {...props} onLogin={onLogin} />} />

Проблема в том, что перенаправление работает при нажатии этой кнопки, которая выдвигает историю, чтобы показать компонент входа:

<Button text="Login" onClick={() => { history.push('/login') }} />

но он не работает при загрузке или перезагрузке страницы непосредственно по этому пути.

Ответы [ 3 ]

0 голосов
/ 20 мая 2019

Полагаю, что вы исправите эту проблему с помощью компонента Redirect из react-router следующим образом:

import { Redirect } from 'react-router'

/* some code */ 

<Route path="/login/:domain?" render={props => status ? <Redirect to="/"/> : <LoginPanel {...props} onLogin={onLogin} />} />
0 голосов
/ 20 мая 2019

Я обнаружил, что изменение window.location должно быть связано с действием пользователя на работу (например, нажатие кнопки). То, что я сделал, это экран, который спрашивает пользователя, что он хочет сделать, и основываясь на ответе пользователя, я делаю или не изменяю window.location.

0 голосов
/ 20 мая 2019

Похоже, что при прямой загрузке страницы механизм маршрутов не работает.

Если вы используете рендеринг на стороне сервера, то вам также следует настроить маршрут /login на стороне сервера.

Если вы используете только веб-пакет (ваш сайт является статическим сайтом), вам следует убедиться, что в правильной папке есть файл с именем login.html или около того.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...