Window.location在ComponentDidMount()中不一致地工作

时间:2019-05-20 08:45:08

标签: javascript reactjs react-router

我试图通过将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 :(得分:0)

似乎直接加载页面时,路由机制失败。

如果您正在使用服务器端渲染,则也应该在服务器端配置/login路由。

如果仅使用webpack(您的站点是静态站点),则应确保在正确的文件夹中有一个名为login.html的文件。

答案 1 :(得分:0)

我想您可以通过使用react-router中的Redirect组件来解决该问题,

import { Redirect } from 'react-router'

/* some code */ 

<Route path="/login/:domain?" render={props => status ? <Redirect to="/"/> : <LoginPanel {...props} onLogin={onLogin} />} />

答案 2 :(得分:0)

我发现window.location的更改必须与要执行的用户操作有关(例如,单击按钮)。我所做的是一个询问用户他想做什么的屏幕,根据用户的响应,我是否进行了window.location更改。